1、机器学习的改进
如果训练得到的参数在新的样本上预测时产生巨大误差,有以下改进方法:
1)、获取更多的训练样本
2)、减少特征集防止过拟合
3)、增加特征集,如新的特征或者增加多项式特征
4)、增大正则化参数
5)、减少正则化参数
6)、获取更多训练实例
2、评估假设
为了节省时间,可以借助机器学习诊断法排除掉无效的方法。
诊断法的意思是:这是一种测试法,你通过执行这种测试,能够深入了解某种算法到底是否有用。
在诊断之前,我们先要评价假设函数的效果。
1)、画图,观察图形趋势,但不适用与多特征变量的情况
2)、将数据分成训练集和测试机,用70%的数据作为训练集,剩下30%的数据作为测试机
(要对数据洗牌后再分)。
通过训练集学习得出的模型参数,对测试集运用该模型,有两种方法计算误差:
a: 对于线性回归模型,利用测试集数据计算代价函数J
b:对于逻辑回归模型,可以利用测试数据集来计算代价函数
还可以计算误分类的比率:对每一个测试集实例,计算:
然后求平均。
3、二项式模型次数选择
假设要在10个不同次数二项式模型中选择,交叉验证集可以帮助我们选择更能适应一般情况的模型。
使用60%的数据作为训练集,20%的数据作为交叉验证集,使用20%的数据作为测试集。
模型选择的方法是:
a 、使用训练集训练处10个模型;
b、用10个模型分别对交叉验证集计算得出交叉验证误差(代价函数的值)
c、选取代价函数最小的模型
d、用c选出的模型对测试集计算得出推广误差
高偏差和高方差的问题本质上是欠拟合和过拟合的问题。
通过将训练集和交叉验证机的代价函数误差与多项式的次数绘制在同一张图表上来帮助分析:
训练集误差和交叉验证集误差近似时:偏差/欠拟合
交叉验证集误差远大于训练集误差时:方差/过拟合
4、选择正则化系数
选择一系列想要测试? 值,通常是 0-10之间的呈现 2倍关系的值(如: 倍关系的值(如: 0,0.01,0.02,0.04,0.08,0.15,0.32,0.64,1.28,2.56,5.12,10共 12个)。同样把数据分为训练集、交叉验证集和测试集
选择lanmda的方法:
a、使用训练集训练出12个不同程度正则化的模型
b、用12个模型分别对交叉验证集计算出的交叉验证机误差
c、选择得出交叉验证误差最小的模型
d、运用步骤c中选出的模型对测试集计算出推广误差
绘制在一张图上可以看出:
当较小时,训练集误差较小,而交叉验证机误差较大(过拟合)
随着的增加,训练误差不断增加,而交叉验证机误差先减小后增加()欠拟合
5、学习曲线
学习曲线是训练集误差和交叉验证集误差与训练集实例数量m的函数
上面图例说明高偏差/欠拟合的情况下,增加训练集规模不一定有帮助
上面图例说明高方差/过拟合情况下,增加训练集规模可能可以提高算法效果
6、神经网络的调试
较小的神经网络参数少,容易出现高偏差,较大的神经网络参数多,容易出现高方差。
通常选择较大的神经网络并采用正则化处理效果较好。
隐藏层层数,通常从一层开始逐渐增加层数,可以使用交叉验证集的方法,分别训练不同隐藏层数的神经网络,然后选择交叉验证集代价最小的神经网络。
7、总结
高方差3个方法:a、更多训练实例,b、减少特征的数量,c、增加正则化程度
高偏差3个方法:a、增加多项式特征,b、增加特征的数量,c、减少正则化程度
下面讲述如何使用更加系统性的方法,构建一个复杂的机器学习系统。
1、误差分析
构建一个机器学习算法的方法:问题的时候,
a、从一个简单的能快速实现的算法开始,实现该算法并用交叉验证集数据测试这个算法。
b、通过画出学习曲线,决定是增加更多数据,或者添加更多特征,还是其他选择
c、进行误差分析,人工检查交叉验证集中我们算法产生预测误差的实例,看看这些实例是否有某种系统化的趋势。
以垃圾邮件过滤器为例,误差分析要做的是:a、检验交叉验证集中产生错误预测的所有邮件,看是否能将这些邮件按
照类分组,例如医药品垃圾邮件,仿冒品垃圾邮件,或者密码窃取邮件等,然后看分类器对哪一组邮件的预测误差
最大,并进行优化。b、思考怎么改进分类器,如发现是否缺少某些特征、记下这些特征出现的次数,然后从出现次数
最多的情况开始着手优化。
当构造学习算法的时候,我们会尝试许多新的想法,实现很多版本的学习算法,每一次都要手动的做误差分析,帮助
我们做出正确的决定。
3、评价指标
在误差分析时,需要设定合适的误差度量值。
当训练集中存在类偏斜情况(有非常多同一类的实例,只有很少或者没有其他类的实例),使用交叉验证误差值|
作为度量值对学习算法会有影响。
查准率 = TP/(TP+FP) ;查全率=TP/(TP+FN)。
在预测时,查准率和查全率的比例都是越高越好。
举个例子,在用算法来预测癌症是否是恶性的时,如果训练集中,只有0.5%的实例是恶性肿瘤。假设算法在所有
情况下都预测肿瘤是良性的,那么误差只有0.5%,然而其查全率是0。
假设我们算法输出结果在0-1之间,用0.9作为阈值比用0.5作为阈值能够得到更高德查准率,但是却减小了查全率。
反之,如果用0.3作为阈值,能得到更到的查全率,但是查准率会降低。
把查全率和查准率的关系绘制成图表如下:
有很多结合P和R的方法,机器学习传统上最常用F1 score公式来选择使的F1值最高的阈值:
F1 score没有任何意义,有点像是查准率和查全率的的均值。如果查准率和查全率其中一个为0,则F1score的
值为0,如果想要F1score的值大,则查准率和查全率都要是比较大的值(比如其中一个等于1)。
通过选择合适的阈值,来控制P和R的平衡。
如果想要自动设置阈值,则可以尝试一组不同的阈值,评估在不同的阈值下交叉验证集的P和R,然后选择F score
最大的阈值。
3、 训练数据的规模
数据有时是唯一能实际起到作用的。
前面精要不要盲目的从一开始就花大量时间来收集大量的数据,因为大量的数据并不总是有用.
但是在有时得到大量的数据也可以使一个很好的获取非常高性能的学习算法的方法。
在下面这个易混淆词的分类问题中,研究人员选择了几种当时领先的机器学习算法,应用于不同大小的训练数据集
进行训练
得到结果如下图:
可以看出这些算法,都具有相似的性能,且随着训练集数据量的增加,这些算法的性能都对应的增强了。
给一个看起来“劣等的”算法更多的数据,他可能会比其他算法更好。
这引起了一个共识:取的成功的人不是拥有最好算法的人,而是拥有最多数据的人。
这种说法何时为真呢?
大量数据有帮助的情况有两个条件:
a、特征值有足够的信息,即人类专家从X能准确的预测出Y
b、拥有复杂的函数,例如训练一个具有很多参数的学习算法,或者带有很多隐藏单元的神经网络。
原因:一个高性能的学习算法拥有较小的偏差和方差。通过一个具有很多参数的学习算法可以得到较低的偏差。
并且能很好的你和训练集。如果训练集比参数的数量还大很多,那么这些算法就不太可能会过度拟合,训练误差有可能接近测试误差。