【Machine Learning, Coursera】机器学习Week6 机器学习系统设计
ML Week6: Machine Learning System Design
本节内容:
在正式训练前,首先构建一个简单的算法并用交叉验证集检验,人工对交叉验证集中被错误分类的样本进行误差分析。和之前学习的机器学习诊断一样,误差分析也可以帮助我们迅速发现最有效的改进算法的方法。
相关机器学习概念:
误差分析(error analysis)
1. Prioritizing what to work on: Spam classification example
1.1 Building a spam classifier
我们以垃圾邮件分类为例,讨论机器学习系统设计中需要注意的问题。
如何训练一个垃圾邮件分类器:
1.分析垃圾邮件的特点。如discount, buy, now, deal等单词的出现频率高、m0rtgage, med1cine等故意的拼写错误、路由信息不正常等。
2.应用监督学习进行预测。
3.选取特征。这里是人工选出100个单词作为特征x,但在实践中,一般的操作是遍历训练集,选出出现频率最高的n(10,000~50,000)个单词作为特征。
4.获取每个邮件样本的特征向量。某一单词出现则记为1,不出现则记为0,不统计词频。
5.训练分类器。
为了提高分类器的正确率,可以采取以下方法改进算法:
1)获取更多数据。如通过"Honeypot"收集垃圾邮件数据。
2)基于邮件标题构造复杂的特征变量。如邮件的路由信息。
3)基于邮件正文构造复杂的特征变量。如discount和discounts是否等同、deal和dealer是否等同、大小写问题等。
4)构造复杂算法检测拼写错误问题。
以上任何一种方法都会消耗大量时间,我们应当避免随机选取,而要选择一个最有成效的。这就需要用到一个更加系统的方法,误差分析(error analysis).
1.2 Error analysis
构建机器学习算法的推荐流程:
1)构建一个简单算法并用交叉验证集检验。在一天之内完成,得到一个初步的结果。
2)画出学习曲线。观察是否有高偏差和高方差问题,由此决定是增加更多数据还是增加更多特征。
3)误差分析:人工检验交叉验证集中被错误分类的样本,总结系统性规律,该过程有助于启发我们寻找新的特征。
在垃圾邮件分类问题中,应统计以下数据并寻找系统性规律:
1)最容易被错误分类的邮件类型是什么?卖药/卖仿品/钓鱼邮件?
花更多时间研究最容易被错误分类的邮件类型并总结规律,构造更好的特征变量来区分它们。
2)哪些特征最为明显?错误拼写/路由信息异常/标点符号异常?
找到最强的特征并花时间构造相应的复杂特征变量。
量化评估算法表现非常重要。构造一个可以快速实现的算法,对结果进行误差分析,量化评估该算法的表现,可以快速地帮助我们找到最有效的改进方法。
当然,误差分析不能帮我们解决所有问题。比如它不能帮我们判断用词干提取软件将discount和discounts, deal和dealer这类单词等同对待是否能够提高算法表现。同样地,我们可以用一个不完美但快速的算法检验一下使用词干提取和不用词干提取的分类效果,通过量化的指标(如交叉验证错误率)来判断是否应当采用它。
2. Data for ML
Michele Banko和Eric Brill用四种算法拟合不同大小的训练数据集,解决易混淆单词区分的问题。其研究结果显示,随着训练数据集的增大,所有算法的性能都提高了。即使是在规模较小时表现较差的算法,只要给它足够多的数据,其表现甚至可能超过“优等”算法。
这项研究似乎说明“取得成功的不是拥有最好算法的人,而是获得最多数据的人”。
在机器学习应用建议(https://blog.****.net/weixin_42395916/article/details/82312920)中我们学过,在欠拟合的情况下,盲目地获取大量数据并不能帮我们提高算法性能。只有当特征变量包含了足够多的用于预测y的信息时,获取大量数据才是一个获得高性能学习算法的方式。
如何验证这一点呢?
一个有用的测试方法是,问问自己:给定输入特征向量x,一个人类专家是否能够自信地预测出y?
在易混淆单词预测问题中,给出所有特征值,一个英语专家应该能够准确地预测空白中应该填入的单词;在只给出住房面积预测房价的问题中,即使是房地产经纪人也很难给出准确的预测。对于后一种情况,获取大量数据也是没用的。