一、机器学习系统的设计
1、确定执行的优先级
我们以垃圾邮件分类为例,途径可以有:
- 收集大量的数据(例如,honeypot)
- 选取更多复杂的特征量(将邮件标题,邮件单词也考虑进来)
- 开发更为复杂的算法来处理输入(例如一些故意的拼写错误,m1ss, hell0等)
但是我们很难说,对于一个具体的问题,哪种方法可能会有效果。
2、误差分析
对一个具体的机器学习问题,由于无法简单的确定优先级,所以推荐的做法是:
- 快速实现一个简单的算法,并使用交叉验证方法去检验它
- 画出相应的学习曲线,决定是否加入更多的特征或者数据
- 误差分析:人工找出错误分类的规律。
另外!设定一个“误差度量值”是特别重要的。算法可以返回一个数值评价指标,来估计算法执行的效果。
3、不对称性分类的误差评估(Skewed Classes)
有些时候,我们要分类的东西,其数量比可能极不对称,这样的情况我们称为偏斜类(Skewed Classes)。例如,在癌症诊断时,医学上来说可能有0.5%的样本有癌症。而现在,假设我们训练出了一个算法,其误差有1%,如果我们改变这个算法,把模型简单地设置为“全都没有癌症”,其误差降低到了0.5%,但是很显然这样的做法是不可取的。
那么对于这样的情况,一般的误差度量值并不能准确衡量算法的效果。由此我们引出了两个参数:查准率和召回率(Precision/Recall)。
对于一个癌症分类问题,我们假设y=1表示患有癌症,即rare class:
- 预测为: 1, 实际为: 1 — True positive
- 预测为: 0, 实际为: 0 — True negative
- 预测为: 0, 实际为, 1 — False negative
- 预测为: 1, 实际为: 0 — False positive
那么,查准率precision为:
召回率Recall为:
这两个值都是越高越好。
4、查准率和召回率的权衡
假如我们想让患者对我们发出的判定更信任,那么我们可以将分类的阈值提高(毕竟被判定为癌症后不论生理还是心理都要承受巨大的痛苦):
- 当hθ(x)≥0.7时诊断为癌症
- 当hθ(x)<0.7时不认为是癌症
这样的话,被判定为癌症的患者有高于70%的概率真的患上了癌症。
在这个算法下,我们有更高的准确率,但是更低的召回率。这意味着,我们可能会漏掉更多实际上有癌症的患者。
那么如果我们换一个方法,降低阈值:
- 当hθ(x)≥0.3时诊断为癌症
- 当hθ(x)<0.3时不认为是癌症
这是一个比较保守的算法,在这个算法下,我们有更高的召回率,但是更低的准确率。这意味着我们尽可能不漏掉患者,但是也让许多本来健康的人承受了痛苦。
如何选取一个评估值,去得到较高的查准率同时较高的召回率呢。这里使用一个F指标或F1指标(F Score or F1 score):
P,R分别为查准率和召回率的均值。
二、机器学习数据
我们应该训练多少数据?
在某些情况下,如果给出足够的数据,“劣等算法”可以优于具有较少数据的高级算法。
我们必须让我们的特征量来获得足够的数据量。一个较为有效的思路是:给定输入x,人类专家能够自信地预测y吗?
使用大数据的理由:如果我们有一个低偏差的算法(拥有许多特征量或隐藏单元的复杂函数),那么使用更大的训练集,将减少过拟合的可能性