模型的选择、评估和优化-上
由ypyu创建,最终由ypyu 被浏览 57 用户
在本文中,我将介绍机器学习的模型选择、评估和优化
因为知乎中对于markdown的支持太差了,本文不在知乎直接排版,所以阅读体验不是很好,若想获得更好的阅读体验,请点击下文链接进行阅读。
所有的文章都会在我的博客和我的知乎专栏同步进行更新,欢迎阅读决策树所有的文章都会在我的博客和我的知乎专栏同步进行更新,欢迎阅读
下面是正文:
引入
对于一个机器学习工程而言,我们可以选择的模型众多,就之前的章节,我们已经可以选择:
对于一个模型而言,我们也有很多模型参数需要人工选择,本章将对模型的评估选择和优化进行详细介绍。
概念介绍
过拟合和欠拟合
在机器学习中,我们期望通过训练集来得到在新样本上表现的很好的学习器,找出潜在样本的普遍规律,在训练过程中,可能会出现两种情形:
- 欠拟合:指对训练样本的一般性质尚未学好 。
- 过拟合:学习器把训练样本学得“太好”了的时候,可能把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质,这样就会导致泛化性能下降。
可以通过下图来辅助理解:
在机器学习中,我们尤其要预防过拟合的发生,但由于机器学习的问题常常是NP难甚至是NP完全的,而有效的算法必定是多项式时间内完成的,所以只要承认P=NP,就需要承认过拟合无法完全避免。
当然,P=NP是目前尚未证明或证伪的结论,我倾向于认为P!=NP。
偏差和方差
对于测试样本x,其真实标记为y,数据集中的标记为$y_1$,机器学习算法输出的标记为$y_2$,算法输出的期望值为$\overline y_2$,则有以下定义:
$方差:var(x)=E((y_2-\overline y_2)^2)$
$偏差:bias^2(x) = E((y-\overline y_2)^2)$
$噪声:\epsilon ^2 = E((y-y_1)^2)$
$总误差:\sigma^2=E((y_1-y_2)^2)$
其中E()代表求期望,有数学推导可知:
$\sigma^2=var(x)+bias^2(x)+\epsilon^2$
即总误差可以分解为方差、偏差与噪声之和。
从直观理解的角度上看:
- 偏差刻画了学习算法本身的拟合能力
- 方差刻画了数据集的变动导致学习性能的变化,也就是学习算法的稳定性
- 噪声表明了数据集标记本身的误差
查准率和查全率
我们评估一个算法好坏的时候经常使用错误率,即算法输出与实际标记不一致的数据所占的比例。
然而有时候,我们会关心更加细致的数据,例如进行疾病检查,我们更关心检查出病症的病人占总病人数目的多少,或者是检测出病症的病人有多少真的有疾病,于是引入查准率和查全率:
首先,根据算法输出和实际标记,可以将数据分为四类:
真实情况 预测结果 | 正 | 反 |
---|---|---|
正 | TP | FN |
反 | FP | TN |
表格中T和F分别代表True和False,P和N分别代表Positive和negative.
查准率P和查全率R定义如下:
$P=\frac {TP}{TP+FP}$
$R=\frac {TP} {TP+FN}$
查准率表示了被输出为正例的样本中真的是正例的比例
查全率表示了所有的正例中被算法识别出来的比例
模型选择
一般而言,参数有两种,一种是模型中的参数,由算法进行自动的优化;另一种是模型本身自带的参数,又称超参数
在机器学习中,超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据。通常情况下,需要对超参数进行优化,给学习机选择一组最优超参数,以提高学习的性能和效果。
例如,我们再进行线性回归时,可以选择很多种形式的函数,例如:
$y_1=\theta_0 + \theta_1x$
$y_2=\theta_0 + \theta_1x +\theta_2x^2$
$y_2=\theta_0 + \theta_1x +\theta_2x^2+\theta_3x^3......$
也就是说,我们要选定到底哪个形式的模型效果会比较好,为了得到最好的模型,我们将数据集分为三个部分。
- 训练集(60%)
- 测试集(20%)
- 交叉验证集(20%)
其中训练集用于算法的训练,由此,我们可以得到很多个不同的模型,再使用交叉验证集分别测试每个模型的泛化能力,选择其中最优的模型。
最后,使用测试集来测试最优模型的泛化能力,为什么不直接使用上一步的交叉验证集呢?因为, 这个交叉验证集误差是我们通过对比选择出来的, 它在这个数据集上肯定是最优的, 相当于我们已经看到了这些数据, 用它来代表对未知数据的泛化能力显然不行。
在划分数据集的过程中,要保证数据集的划分尽可能保持数据分布的一致性,即使得它们独立同分布,数据集划分的方法一般而言有以下几种:
- 留出法:最基本的抽样方法,最好使用分层抽样保证数据分布一致性,也可以做多次划分,最后返回在每次划分上测试结果的平均值,可以避免偏差
- 优点:划分简单
- 缺点:可能产生偏差,若采取多次取样,则训练成本过高
- 交叉验证法:将数据集划分为k个大小相似的数据集,注意使用分层抽样。每次使用一个小数据集做测试集,其他k-1个做训练集,轮流进行k次,最后返回的是测试结果的平均值。
自助法:假设有m个数据的数据集,每次有放回的从其中抽取一个样本,执行m次,最终大概有36.8%的数据未被抽取到,当做测试集,其余当做训练集。
- 优点:在数据集较小时用处较大,划分出的多个数据集有利于集成学习。
- 缺点:改变了原数据样本的分布,会引入偏差
$ \lim_{m \to +\infty } (1-\frac 1m)^m = \frac 1 e = 0.386(该式子实际是e的定义式) $
模型评估
在前面,已经介绍过查准率和查全率,当想要评估一个模型的好坏时,便可以使用这两项指标。
实际上,除了一些很简单的任务外,查准率和查全率是无法两全的:
- 若要提高查准率,即提高判为正例的标准,那么必定会漏掉一些真的正例,降低查全率
- 若要提高查全率,即降低判为正例的标准,必定会混入假的正例,降低查准率。
对于一个算法而言,其查准率和查全率关系如图所示:
有了这两项指标,一般按照如下原则比较不同模型:
- 若A模型的P-R曲线完全包住B,则A模型优于B
- 根据P-R曲线包裹的面积,面积大的模型更优
- 根据模型的现实需要,选择P或R值更好的模型
- 根据$F_1$值,$F_1$值大的模型较为优秀
$F_1 = 2* \frac {1} {\frac 1P + \frac 1R}$
- 最好的方法是综合现实情形和$F_1$值,引入$F_{\beta}$,其中参数$\beta$是对于查全率的重视程度
$F_{\beta}=(1+\beta^2)\frac {1} {\frac 1P + \frac {\beta^2}{R}}$
\