机器学习之诊断法
是否过拟合
我们将数据分成训练集和测试集,通常用70%的数据作为训练集,用剩下30%的数据作为测试集。
很重要的一点是训练集和测试集均要含有各种类型的数据,通常我们要将数据集随机打乱,然后再分成训练集和测试集。
误差计算error
-
对于线性回归模型,我们直接计算代价函数 J J J
-
对于逻辑回归模型,error的定义为:
最后都是对计算出的error误差求平均值
然后我们能大概知道这组结果的拟合水平
模型选择交叉验证集
出现在多个模型的情况下进行选择
具体方法为使用60%的数据作为训练集,使用 20%的数据作为交叉验证集,使用20%的数据作为测试集
具体步骤:
- 使用训练集训练出10个模型
- 用10个模型分别对交叉验证集计算得出交叉验证误差(代价函数的值)
- 选取代价函数值最小的模型
- 用步骤3中选出的模型对测试集计算得出推广误差(代价函数的值)
诊断偏差与方差
如果这个算法的表现不理想,那么多半是出现两种情况:要么是偏差比较大,要么是方差比较大。
其中training error指训练集误差,cross validation error指交叉验证集误差
随着次数上涨,交叉验证集误差先降后升
当训练误差与交叉验证误差相近时:交叉验证误差为偏差——欠拟合
当训练误差远小于交叉验证误差时:交叉验证误差为方差——过拟合
正则化
选择 λ的方式是:
-
使用训练集训练出12个不同程度正则化的模型
-
用12个模型分别对交叉验证集计算的出交叉验证误差
-
选择得出交叉验证误差最小的模型
需要注意的是如果一味追求交叉验证误差过小,可能会导致偏差过大,也就是欠拟合的情况
所以最终选择时得综合两者的情况
学习曲线
简单来说是以m(训练集样本数)为横轴,训练集误差和交叉验证集误差为纵轴的曲线
高偏差欠拟合的情况(一根直线):
具体表现为:
当m很小时,训练误差很小,交叉验证集误差很大
随着m逐渐在增大,两者逐渐逼近且相等
这时说明增加训练集的数量并不会有帮助
高方差过拟合
具体表现为:
当m很小时,训练误差很小,交叉验证集误差很大
随着m逐渐在增大,两者逐渐逼近,但仍会有十分明显的差别
这时说明增加训练集的数量会有帮助
对神经网络而言
参数较少的情况往往会导致高偏差
而参数较多的情况下会导致高方差
建议
- 获得更多的训练样本——解决高方差
- 尝试减少特征的数量——解决高方差
- 尝试获得更多的特征——解决高偏差
- 尝试增加多项式特征——解决高偏差
- 尝试减少正则化程度λ——解决高偏差
- 尝试增加正则化程度λ——解决高方差
误差分析
对于机器学习简单算法的构建过程:
- 从一个简单的能快速实现的算法开始,实现该算法并用交叉验证集数据测试这个算法
- 绘制学习曲线,决定是增加更多数据,或者添加更多特征,还是其他选择
- 进行误差分析:人工检查交叉验证集中我们算法中产生预测误差的样本,看看这些样本是否有某种系统化的趋势
类偏差的误差度量
-
正确肯定(True Positive,TP):预测为真,实际为真
-
正确否定(True Negative,TN):预测为假,实际为假
-
错误肯定(False Positive,FP):预测为真,实际为假
-
错误否定(False Negative,FN):预测为假,实际为真
precision查准率(精准度)=TP/(TP+FP)
recall查全率(召回率)=TP/(TP+FN)
阀值
如果我们希望提高查准率,我们可以使用比0.5更大的阀值
(减少错误预测病人为恶性肿瘤的情况,同时却会增加未能成功预测肿瘤为恶性的情况)
如果我们希望提高查全率,我们可以使用比0.5更小的阀值
(让所有有可能是恶性肿瘤的病人都得到进一步地检查)
F 值
用来综合评定精准度和召回率的值,越大说明越精准