本文是coursera上吴恩达老师的machinelearning课程第六周的个人笔记,如果有幸被同好看到,可以在留言中指出我的问题或者一起讨论!
一、算法评估
1、数据集的划分
评估算法过程中,我们要将数据集分成训练集、交叉验证集、测试集,习惯上应该先将数据集随机无规律排序后按照6:2:2的比例进行划分。三个集合分别计算的代价函数J记为Jtrain,Jcv,Jtest。
2、模型(多项式)选择
即假设函数h的次数,对于待测试的的不同次数的假设函数分别利用训练集训练,将得到的模型再利用交叉验证集(简称验证集)计算代价函数即验证误差。验证误差最小的模型即位采用的模型,再利用测试集得到推广误差。
3、欠拟合与过拟合的诊断
此时需要绘制Jtrain和Jcv的曲线来分析拟合好坏情况。如图所示,当次数很小的时候,对训练集和验证集拟合效果都不好(误差高),此时为欠拟合;当次数过大的时候,对测试集拟合情况会非常的好,但是对未知情况(验证集)的预测能力会下降(误差升高),即训练集误差很小,验证集误差过大,两者相差很大,此时为过拟合。得出结论:增大多项式次数能改善欠拟合情况。反之则相反。
4、正则化与拟合情况的关系
此时依旧需要绘制Jtrain和Jcv的曲线,但是横坐标为正则化参数。如图所示,正则化参数越大,对拟合的“惩罚”就越大,所以会减少过拟合情况,过大的极端条件下,即位欠拟合,过小即不做正则化处理,即为过拟合。得出结论:减小正则化参数能改善欠拟合情况。反之则相反。
5、学习曲线
一味的增大训练实例不一定能显著提升算法的能力,这个结论从学习曲线中得到。当Jtrain从很小增加到很大,Jcv从很大没有显著下降时,即位欠拟合,如图所示,即使增加m的数量,也无法改善此算法的能力。
当Jtrain从很小缓慢增加,Jcv从很大缓慢下降,此时在较少训练集下表现出很大的差距(large gap)时,即为过拟合,如图所示,随着m的增大,二者距离会越来越接近,进而达到改善算法能力的效果。
综合这两种情况得出结论:增加训练实例的数量可以改善过拟合情况,没有反之。
6、特征与神经网络
对于特征,我们可以去掉一些无关特征来改善过拟合情况;或者增加更能预测结果的一些特征来改善欠拟合。
对与网络较小的神经网络,参数少,容易导致欠拟合,但是计算量小;对于较大的神经网络,参数多,容易导致过拟合,可加入正则化参数来改善,计算量大。较大的神经网络加正则化的效果更好。
二、误差分析
1、Skewed Classes(分类偏移)
分类偏移是指两个类别中其中一个类别出现的概率非常小,比如肿瘤预测,肿瘤患者在整个数据集中往往只占0.5%,剩余的99.5%都是健康的,在这样的情况下正常的考虑误差的方式将不适用,因为即使算法永远预测一个人是健康的,误差也只有0.5%。为了评估skewed classes情况的数据集,我们要引入查准率(precision)和查全率(recall)。
查准率:预测为1的里面,确实是1的概率。
查全率:实际是1的里面,被预测出来的概率。
查准率和查全率都应该尽可能的大。这里面的1,选取概率小的那一个类别。所以按照肿瘤的例子,如果永远预测一个人是健康的(0),那么他的查准率为无穷大,但是查全率为0。
2、阈值与权衡查准率和查全率
绘制下图,查准率查全率与阈值的关系。
阈值是指假设函数h不一定只有在大于0.5的适合预测为1,也可以设置新的阈值,比如为了让病人警惕性更强一些,可以将阈值设置为0.3,这样可以查得更全(查全率高),也可以把阈值设置的更高比如0.9,这样只有当可能性非常大时才会被判断为肿瘤,也就是查得更准(查准率高)。
为了权衡两个指标的关系,对于既定的几个阈值,计算他们的查准率P和查全率R,然后计算F1值:F1score = 。选取F1最高的阈值,即可权衡查准率和查全率。