讲述如何使用更加系统性的方法,构建一个复杂的机器学习系统。
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、拥有复杂的函数,例如训练一个具有很多参数的学习算法,或者带有很多隐藏单元的神经网络。
原因:一个高性能的学习算法拥有较小的偏差和方差。通过一个具有很多参数的学习算法可以得到较低的偏差。
并且能很好的你和训练集。如果训练集比参数的数量还大很多,那么这些算法就不太可能会过度拟合,训练误差有可能接近测试误差。