评估改进机器学习模型的一般方法
对数据集分类
改进机器学习模型有以下方法供选择:
1. 增加更多的训练样本;
2. 增加或减少特征数量;
3. 使用特征的更高次幂;
4. 增加或者减少正则化参数。
构造机器学习模型的一般步骤是:首先使用训练集(training dataset)训练模型,再使用测试集(test dataset)计算模型的预测误差,然后使用以上方法中的一种或几种改进模型,用训练集进行训练,使用测试集进行评估,如此反复最后选择测试误差最低的一种模型。
以上方法存在的问题是,使用测试集挑选的模型可能只是碰巧在这部分测试集上表现很好,但是不能泛化到新的样本中。所以为了评估模型在泛化能力,一般在训练模型前将数据集分成三份,训练集(train dataset), 验证集(cross validation dataset), 测试集(test dataset),各占整个数据集的比例为6:2:2。
例如,某一模型只包含一个特征的多项式形式,
其中,
为了挑选最优的多项式,先用训练集训练不同特征幂次的模型,再用验证集选出最优的模型,最后再使用测试集评估预测误差 。随着特征幂次的升高,训练集的预测误差越来越低,但是验针集可能呈现出一个U行的曲线,这一曲线的两端称为偏差(bias)和方差(variance),分别对应欠拟合(underfitting)现象和过拟合(overfitting)现象。
高偏差和高方差
当训练集的预测误差和测试集的训练误差都很高并约等时,称为高偏差;当训练集的预测误差很低,但验证集的预测误差很高时,称为高方差。
从上图可见当模型简单时,不能充分表达特征和标签的对应关系,训练集和验证集的预测误差都很高;当模型的多项式次数很高时,能很好的拟合训练集中的大部分数据,包括一些不典型的数据,这时模型的泛化能力下降,使得验证集的预测误差不降反升。当特征较少时,可以降低特征的次数解决过拟合问题,但是如果特征太多,比如神经网络模型,不仅包含大量的特征,而且很多特征时自动生成,要通过手动减少特征幂次的方法消除过拟合现象不现实,所以对于过拟合现象一般是使用正则化方法来解决。加入正则化项的预测误差计算公式修正为:
加入了正则化项相当于对高次幂的特征加入了惩罚机制,使用梯度下降算法修正权重时,如果某一特征导致了较高的预测误差,那其对应权重的偏导数也较高,所以其对应的权重会下降较快。正则化项进一步加速了导致预测误差的特征对应权重的下降速度。如最左边的图所示,当
λ
λ
很大时,所有权重都会快速下降,并趋近与0,而当选择合适的
λ
λ
,则高次幂的特征对应的权重下降的速度会比低次幂特征下降更快,最终高次幂的权重趋于0,从而降低了高次幂的特征对导致的过拟合现象。
一般情况下,样本数越多,相对同一模型的泛化能力越强,预测误差越小;但是如果训练模型本身欠佳,则优化模型对预测误差的改善比收集更多数据更加明显。那么对于改进模型和收集数据应该如何选择呢?一般情况可以分析学习曲线来决定下一步的改进方法。
如果对模型的评估表现为高偏差或欠拟合现象,此时测试集和数据集的预测误差都很高,收集更多数据对模型性能提升有限,则应该增加模型的复杂程度,例如增加特征,增加特征的次数和减小
λ
λ
的值。
如果对模型的评估表现为高方差现象,训练集的预测误差很小但是测试集的预测误差很大,此时应该收集更多的数据,提高模型的泛化能力来减少测试集的预测误差,或者增加
lambda
l
a
m
b
d
a
的值解决过拟合。
偏斜类
分类的数据集有时呈现不均匀的统计特征,正样本的数据比负样本的数据多得多,此时预测误差的值并不能准确表示机器学习的性能。
例如要开发一种能够对癌症进行预测的机器学习模型,收集1000例数据样本,可能只有5例患有癌症。如果此时模型的预测误差为1%,则准确达到99%,看似很高,但是如果模型对所有样本输出均为非癌症,准确率高达99.5%,但这一模型显然并不是好的预测模型。所以为了评估偏斜类的预测误差,引入了精度(precision)和召回率(recall)的两个新的概念。
对于二分类的问题,样本可以分为正样本的负样本,精度表示预测为正样本的数据集中正样本所占的比例,召回率表示所有正样本中被预测正确的样本所占的比例。
在评估模型时,一般将较少出现的类型标记为1,依然以上边的癌症问题为例,将癌症标记为1,则如果将所有样本预测为非癌症0,则得到召回率和精度值都为0,如果将所有样本预测为癌症1,则:
此时召回率高但精度却很低,可见使用召回率和精度解决了偏斜类数据集样本不均匀的问题,但是要评估模型的表现还需要将二者结合,一般使用F-score来评估模型表现的
其中P代表精度,R代表召回率。
只有在召回率和精度都较高的时候,F-score才能得到较高的值。
总结
本章的前半部分讨论使用机器学习解决问题时,可以先构建一个简单的模型,将数据集分为三份,训练集,验证集和测试集,使用训练集和验证集画出学习曲线,分析当前模型是高方差还是高偏差问题,如果是高偏差,可以通过增加模型的复杂度,例如增加特征,使用特征的更高次幂或者减小 λ λ 来解决;如果是高方差问题,则可以通过较少收集更多的样本和增加 λ λ 来解决;后半部分主要针对偏斜类数据集介绍了精度、召回率的概念,并最终给出了使用F-score来评估模型表现的方法,对召回率和精度的使用需要注意的是要将数量小的类别标记为1。本章的全部内容来自Ardnew Ng的机器学习课程。