当咱们遇到一个问题,好比预测房价,咱们想要用机器学习算法来更好的解决这个问题,推荐的步骤以下:算法
建议先花点时间实现一个简单能用的算法,好比线性回归预测房价,不须要一开始就花不少时间设计复杂的算法(在软件开发中叫避免过早优化),你能够先实现能用的算法,而后利用上篇文章从 0 开始机器学习 - 机器学习算法诊断中的学习曲线等诊断法来分析算法的优化方向,这样一个简单的算法就成为了优化问题的好工具!网络
有个简单的算法后,咱们就能够画出学习曲线了,而后就能够决定下一步到底要往哪一个方向作优化:机器学习
假如咱们有多个方向能够做为优化的方向,好比如下的方向均可以解决模型的高方差问题:工具
那咱们又如何来评估每种方法的性能到底提高多少呢?或者说有没有一种直接的指标来告诉我,使用了这样一种优化措施后个人算法性能到底提升了多少百分比?post
今天就来看看如何分析机器学习算法的偏差。性能
在介绍偏差分析指标前,先来了解一个偏斜类问题:学习
训练集中有很是多同一类的样本,只有不多或者没有其余类的样本,这样的训练样本称为偏斜类。优化
好比预测癌症是否恶性的 100 个样本中:95 个是良性的肿瘤,5 个恶性的肿瘤,假设咱们在这个样本上对比如下 2 种分类算法的百分比准确度,即分类错误的百分比:spa
5 / 100 = 0.05 = 5%
10 / 100 = 10%
若是仅仅从错误率大小来判断算法的优劣是不合适的,由于第一种人为设置样本都为良性的算法不会在实际项目中使用,可是经过指标却发现效果比神经网络还要好,这确定是有问题的。设计
正是由于存在这么一种偏斜类的训练样本,因此咱们须要用一个更加通常性的算法准确度评价指标,以此适用与任何类型的样本,解决上面那种荒唐的结论。
为了解决这个问题,使用查准率(Precision)和查全率(Recall)这 2 个偏差指标,为了计算这 2 者,咱们须要把算法预测的结果分为如下 4 种:
把这 4 个写到表格里面:
实际值 预测值 | ||
---|---|---|
Positive | Negative | |
Positive | TP | FN |
Negative | FP | TN |
而后咱们就能够定义这 2 个指标啦:
TP / (TP + FP)
:预测为真(恶性肿瘤)的状况中,实际为真(恶性肿瘤)的比例,越高越好TP / (TP + FN)
:实际为真(恶性肿瘤)的状况中,预测为真(恶性肿瘤)的比例,越高越好有了这 2 个指标咱们再来分析下上面的算法性能,第一我的为的算法认为全部的肿瘤都是良性的,也就等价于原样本中 5 个恶性的肿瘤样本一个都没有预测成功,也即全部恶性肿瘤样本,该算法成功预测恶性肿瘤的比例为 0,因此查全率为 0,这说明该算法的效果并很差。
在实际的使用中,查准率和查全率每每不能很好的权衡,要想保持二者都很高不太容易,经过使用如下的公式来整合这 2 个评价指标能够帮助咱们直接看出一个算法的性能优劣:
$$ F_1 Score = 2 \frac {PR} {P + R} $$
之后评价一个算法的性能直接比较 F1 Score 便可,这就大大方便了咱们对比算法的性能。
除了评价指标,还有一个要关心的问题就是样本的规模,在机器学习领域有一句话:「取得成功的人不是拥有最好算法的人,而是拥有最多数据的人」,这句话的意思就是说当咱们拥有很是多的数据时,选择什么样的算法不是最最重要的,一些在小样本上表现很差的算法,通过大样本的训练每每也能表现良好,好比下面这 4 种算法在很大样本上训练后的效果相差不是很大,可是在小样本时有挺大差距:
但在实际的机器学习算法中,为了可以使得训练数据发挥最大效用,咱们每每会选一个比较好的模型(不太容易欠拟合,好比神经网络),再加上不少的样本数据(防止过拟合),经过这 2 者就可让一个算法变的很强大,因此之后当你设计机器学习算法的时候必定要考虑本身的样本规模,选择合适的模型适应你的数据,若是你有不少不少的数据,那么能够选择复杂一点的模型,不能白白浪费你的数据!