目录
一,前言
上一章介绍了如何诊断当前模型并介绍了一些改进的方法。本章主要讨论如何设计算法来达到较好的效果。
引例:假设给定一些邮件数据集,将邮件标注为了垃圾邮件与非垃圾邮件,请设计一个机器学习系统,使得计算机自动能自动识别垃圾邮件。
二,具体设计方法
2.1 预处理
第一步 挑选特征。在机器学习系统设计中最重要的一步就是挑选出合适的特征。特征是否有代表性,决定了系统预测能力的上限。在引例中,一般的做法是将邮件中的单词挑出(中文要做分词)生成单词表,挑选出现频率最高的N个单词(N常为10000~50000)作为邮件的特征。具体做法为给每个邮件生成一个特征向量,每一维代表一个单词是否出现(例如0表示未出现,1表示出现)。
第二步 依据问题,选择正确的辅助方案提升系统精度。常用的办法有:
① 收集更多的数据。E.g 在本例中可以故意暴露邮箱地址在网络,借此收集网络上的垃圾邮件。
② 进一步分析问题,选择更复杂的特征。E.g 在本例中可以分析邮件的标题中是否有特征,一般而言垃圾邮件为了躲开系统的屏蔽会采用一些复杂的标题;再者可以分析文本信息等等。
③采用额外的算法来“生成”特征。E.g 在本例中可以设计程序来甄别出邮件中的错误拼写,垃圾邮件为了躲开系统会检测特殊词汇,一般会将这些词汇故意拼写错误。
2.2 初步设计
在设计的最初不用妄想一步到位,而是明明的研究,测试和改良。推荐的步骤有:
① 先设计出一个简单的系统模型,并运用训练集/交叉验证集/测试集来训练和测试系统。
② 根据训练信息画出学习曲线,分析模型算法的试用情况,借此来选择下一步才需什么方式进行改良。
③ 误差分析,重点观察那些被错误分类的样本,分析出系统有哪些漏洞,由于什么样的特征而分类错误。
2.3 错误分析
正如上所言,当设计并训练出初步模型后,可以人工的分析那些被分析错误的样本,明确模型的优缺点,为接下来的改进指明方向。误差分析是在严重的基础上进行。在本例中误差分析的运用具体有:
① 统计错分类邮件的类型,了解分类器的薄弱点。例如:买卖物品有15封,保险理财有23封,黑客钓鱼有62封。所以接下改进一步分析黑客钓鱼类软件。
② 找出误分类邮件的共同点,添加新特征尝试加大区分度。例如:拼写错误,固定搭配等。
三,数值评价标准
3.1 混淆矩阵
一个好的数值评价标准可以让直观的反应算法模型的效果,以及改进方案是否有效。例如算法准确度有67%,增加一个特征只能增加0.5%的准确度,则说明增加的通知代表性不强。
在介绍具体的数值评价标准前,需要了解混淆矩阵(Error metrics)。矩阵中根据样本标签以及分类结果共分为了四种情况。
正确的正类(TP),即正确的将正类预测为正类。
错误的负类(FN),即错误的将正类预测为负类。
错误的正类(FP),即错误的将负类预测为正类。
正确的负类(TN),即正确的将负类预测为负类。
本身为正类(1) | 本身为负类(0) | |
---|---|---|
预测为正类(1) | TP(11) | FP(01) |
预测为负类(0) | FN(10) | TN(00) |
还需知道收集到的数据集本身可能是“带有偏见”,即样本中各种类型的数据的出现频率与真实频率不符,也不满足训练要求,使其不具有代表性,这样的数据集称之为斜偏类(Skewed classes)。
接下来介绍一些数值评价标准:
准确率(Accuracy): 分类正确的样本占总样本数量的比例,是最为直观的标准,但在斜偏类中参考价值不足。E.g 本例中,如果95%的邮件都是垃圾邮件,可设计一个把所有邮件都编码为垃圾邮件程序,则该程序的正确率为95%,但其没有学到任何信息。
(公式11.1)
精确率(Rrecision):所有预测为正类样本中,真正是正类的样本所占的比例。
(公式11.2)
召回率(Recall): 所有正类样本中,有预测正确的比例。
(公式11.3)
3.2精确率与召回率的权衡
通过精确率和召回率可以更有效的评价算法,即使数据集为斜偏类,也能无法得到较高的分数。但是如何权衡两者之间的比重又成为了新问题。
采用两者的平均值并不具有代表性,所有有了性的评价标准,即为 F1-Score,具体形式为:
(公式11.4)
当P和R两者有一个较小时,F1-Score的值就比较小,当两者都较大时,其值才大。
P | R | AVG | F1-Score | |
A1 | 0.5 | 0.4 | 0.45 | 0.444 |
A2 | 0.7 | 0.1 | 0.4 | 0.175 |
A3 | 0.02 | 0.51 | 0.51 | 0.0392 |
在上表中举了一个运用数值评价标准的例子,有A1,A2,A3三个算法,通过P和R不能得出直观的选择,而通过平均数来决定显然得到了一个不太优秀的算法,而通过F1-Score可以显然选出P和R都比较好的算法,达到了兼顾。
四,数据的作用
由实验表明,当数据量足够的情况下,一个简单的算法也能达到性能,与复杂算法中适当数据的训练相比也不遑多让。尤其是在模型本身的表征能力就很强,比较有较高多项式的算法,以及复杂的神经网络在中,大量的数据能带来惊人的效果。
当然,具体情况还是要通过诊断和分析后采取适当改良方法,不能一味的盲加数据。
五,总结
本章讨论了机器学习系统设计的一些注意事项以及执行步骤,并介绍了一些数值评价标准来供实验者更好的选择改进方案。最后重点提了下数据的作作用。