《machine learning》11 机器学习系统的设计
11.1 邮件分类实例
监督学习supervised learning:x = 邮件的特征 ,y = 标签1或0(是否为垃圾邮件)
特征features x: 选择100个出现频率最高的单词。例如 deal,now…更可能是非垃圾邮件
提取特征单词,按字典排序,特征向量为0/1,判断特征单词是否出现
如何快速的使邮件分类器有低误差:
- 收集更多数据
- 使用更复杂的特征变量描述邮件 (发件人、地址…)
- 关注邮件主题,并使用更复杂的特征变量(标点,大小写)
- 检测邮件中的拼写错误
在机器学习中,可以想尽办法去想检测方法,去尝试各种方法的检测精度和效率。
11.2 误差分析——改进学习算法
推荐的方法:
- 通过简单的算法快速实现,然后通过交叉验证来测试数据
- 画出学习曲线和检验误差,找出算法是否存在高偏差或高方差问题
- 根据高方差或高偏差情况决定是否采用更多的数据集还是更复杂的特征变量。
- 误差分析,观察交叉验证误差,观察被错误分类的邮件有哪些规律,然后设计新的特征或改进
避免过早优化的问题,应当使用实际的证据(图像)来指导我们的决策
在邮件分类例子中,误差分析:
假设有500组样本,算法错误的分类了100个样本。
这时候需分析这100个样本的特征:
- 这些被错误分类的邮件的类型(例如卖药的邮件都会被分错等)
- 错误分类的邮件有哪些特征
通过分析假设得出被错误分类的100个样本有:12封卖药的,4封造假的,53封钓鱼网站,31封其他的
这就说明该算法在筛选钓鱼网站时误差很大,需要研究该类邮件的特征
然后分析该类邮件的特征得出:该类邮件有5封奇怪的邮件来源;216封大小写字母;332封感叹号很多。
结论:可以花时间构造更复杂的基于感叹号和大小写字母的特征
数值估计
改进学习算法时,如果算法能够返回一个数值评价指标来估计算法执行的效果将会很有帮助。
例子:是否应该区分单词大小写(Mom/mom)
- 使用交叉验证集验证不区分大小写的误差率(假设为3%)
- 使用交叉验证集验证使用不同算法区分大小写的误差率(假设有2%, 5%)
- 这时候就会选用验证误差小的算法区分大小写。
quick and dirty
11.3 类偏斜(不对称分类)的误差评估
偏斜类实例:是否患有肿瘤分类
使用逻辑回归模型得到只有1%的误差
但事实上只有0.5%的人患病
当将逻辑回归算法换成全部预测不患病,算法误差降低到0.5%。
形成了十分非正常的现象。不患病人数比患病人数多太多的问题成为偏斜类。
偏斜类问题:
通过算法的改变,预测精度从99%到99.5%到底是不是一个算法的提升?
到底是算法的改进有用,还是说一直预测y=0不患病这类的东西。
因此对于偏斜类问题,使用分类精度无法很好的衡量算法的质量
希望有一个不同的误差度量值或者不同的评估度量值
查准precision / 查全recall
样本实际所属的类是1 ,预测分类也是1 ——真阳性ture positive
样本实际所属的类是0 ,预测分类也是0 ——真阴性ture nagative
样本实际所属的类是0 ,预测分类而是1 ——假阳性false positive
样本实际所属的类是1 ,预测分类而是0 ——假阴性false nagative
查准率precision rate: 真 阳 性 预 测 阳 性 ( 真 阳 性 + 假 阳 性 ) {真阳性\over 预测阳性(真阳性+假阳性)} 预测阳性(真阳性+假阳性)真阳性
查全率recall rate: 真 阳 性 实 际 阳 性 ( 真 阳 性 + 假 阴 性 ) {真阳性\over 实际阳性(真阳性+假阴性)} 实际阳性(真阳性+假阴性)真阳性
如果算法全部预测为不患病,那么真阳性就为0,recall值为0不是一个好算法
11.4 reading off precison and recall权衡查准和查全
是否患癌症举例:(逻辑回归)
当 h ( x ) > 0.5 h(x) > 0.5 h(x)>0.5预测1
当 h ( x ) < 0.5 h(x)<0.5 h(x)<0.5预测0
修改算法:很有把握的情况下才预测患癌症(提高查准率,降低查全率)
当 h ( x ) > 0.7 h(x) > 0.7 h(x)>0.7预测1
当 h ( x ) < 0.7 h(x)<0.7 h(x)<0.7预测0
修改算法:有一定的可能性就预测患癌症(提高查全率,降低查准率)
当 h ( x ) > 0.3 h(x) > 0.3 h(x)>0.3预测1
当 h ( x ) < 0.3 h(x)<0.3 h(x)<0.3预测0
如何比较算法的查准率和查全率???——求F值 2 P R P + R 2{PR\over P+R} 2P+RPR
11.5 机器学习的训练数据大小
易混淆单词例子,判断单词应处于什么位置
使用不同的算法,是否得到更多的数据比好的算法更重要
给定一个输入特征向量x,给定这些特征值,也给定相同的可用的信息和学习算法,如果我们去人类专家这个领域,一个人类专家能准确或自信的预测出y值吗???
填词例子:请一个英语专家能够通过一句话预测出填two
房价例子:请一个卖房专家不能只通过大小预测出房价
因此,如果假设成立,可通过增大数据改善算法;不成立则可通过增加特征变量的复杂度。
使用了复杂的特征变量,训练误差会很小;有庞大的数据集,不会过拟合,训练误差接近测试误差会;复杂的特征变量加上庞大的数据集会得到很小的训练误差和测试误差,解决高方差和高偏差问题。