共计 1975 个字符,预计需要花费 5 分钟才能阅读完成。
一、构建算法的举荐步骤
当咱们遇到一个问题,比方预测房价,咱们想要用机器学习算法来更好的解决这个问题,举荐的步骤如下:
1.1 实现一个简略的算法
倡议先花点工夫实现一个简略能用的算法,比方线性回归预测房价,不须要一开始就花很多工夫设计简单的算法(在软件开发中叫防止过早优化),你能够先实现能用的算法,而后利用上篇文章从 0 开始机器学习 – 机器学习算法诊断中的学习曲线等诊断法来剖析算法的优化方向,这样一个简略的算法就成为了优化问题的好工具!
1.2 剖析学习曲线
有个简略的算法后,咱们就能够画出学习曲线了,而后就能够决定下一步到底要往哪个方向做优化:
- 取得更多的训练样本
- 尝试缩小特色的数量
- 尝试取得更多的特色
- 尝试减少多项式特色
- 尝试缩小正则化水平
- 尝试减少正则化水平
- …
1.3 误差剖析
如果咱们有多个方向能够作为优化的方向,比方以下的方向都能够解决模型的高方差问题:
- 取得更多的训练样本 – 实用于高方差的模型
- 尝试缩小特色的数量 – 实用于高方差的模型
- 尝试减少正则化水平 $\lambda$ – 实用于高方差的模型
那咱们又如何来评估每种办法的性能到底晋升多少呢?或者说有没有一种间接的指标来通知我,应用了这样一种优化措施后我的算法性能到底进步了多少百分比?
明天就来看看如何剖析机器学习算法的误差。
二、机器学习算法误差剖析
2.1 偏斜类问题
在介绍误差剖析指标前,先来理解一个偏斜类问题:
训练集中有十分多同一类的样本,只有很少或者没有其余类的样本,这样的训练样本称为偏斜类。
比方预测癌症是否恶性的 100 个样本中:95 个是良性的肿瘤,5 个恶性的肿瘤,假如咱们在这个样本上比照以下 2 种分类算法的百分比准确度,即分类谬误的百分比:
- 一般非机器学习算法:人为把所有的样本都预测为良性,则分错了 5 个恶性的样本,错误率为
5 / 100 = 0.05 = 5%
- 神经网络算法:训练后预测 100 个样本,把 10 个良性的样本误分类为恶性的样本,错误率为
10 / 100 = 10%
如果仅仅从错误率大小来判断算法的优劣是不适合的,因为第一种人为设置样本都为良性的算法不会在理论我的项目中应用,然而通过指标却发现成果比神经网络还要好,这必定是有问题的。
正是因为存在这么一种偏斜类的训练样本,所以咱们须要用一个更加一般性的算法准确度评估指标,以此实用与任何类型的样本,解决下面那种荒谬的论断。
2.2 查准率与查全率
为了解决这个问题,应用查准率(Precision)和查全率(Recall)这 2 个误差指标,为了计算这 2 者,咱们须要把算法预测的后果分为以下 4 种:
- 正确必定(True Positive,TP):预测为真,理论为真
- 正确否定(True Negative,TN):预测为假,理论为假
- 谬误必定(False Positive,FP):预测为真,理论为假
- 谬误否定(False Negative,FN):预测为假,理论为真
把这 4 个写到表格外面:
理论值 预测值 | ||
---|---|---|
Positive | Negative | |
Positive | TP | FN |
Negative | FP | TN |
而后咱们就能够定义这 2 个指标啦:
- 查准率 =
TP / (TP + FP)
:预测为真(恶性肿瘤)的状况中,理论为真(恶性肿瘤)的比例,越高越好 - 查全率 =
TP / (TP + FN)
:理论为真(恶性肿瘤)的状况中,预测为真(恶性肿瘤)的比例,越高越好
有了这 2 个指标咱们再来剖析下下面的算法性能,第一个人为的算法认为所有的肿瘤都是良性的,也就等价于原样本中 5 个恶性的肿瘤样本一个都没有预测胜利,也即所有恶性肿瘤样本,该算法胜利预测恶性肿瘤的比例为 0,所以查全率为 0,这阐明该算法的成果并不好。
2.3 查准率与查全率的整合
在理论的应用中,查准率和查全率往往不能很好的衡量,要想放弃两者都很高不太容易,通过应用以下的公式来整合这 2 个评估指标能够帮忙咱们间接看出一个算法的性能优劣:
$$
F_1 Score = 2 \frac {PR} {P + R}
$$
当前评估一个算法的性能间接比拟 F1 Score 即可,这就大大不便了咱们比照算法的性能。
三、机器学习的样本规模
除了评估指标,还有一个要关怀的问题就是样本的规模,在机器学习畛域有一句话:「取得成功的人不是领有最好算法的人,而是领有最多数据的人」,这句话的意思就是说当咱们领有十分多的数据时,抉择什么样的算法不是最最重要的,一些在小样本上体现不好的算法,通过大样本的训练往往也能体现良好,比方上面这 4 种算法在很大样本上训练后的成果相差不是很大,然而在小样本时有挺大差距:
但在理论的机器学习算法中,为了可能使得训练数据施展最大效用,咱们往往会选一个比拟好的模型(不太容易欠拟合,比方神经网络),再加上很多的样本数据(避免过拟合),通过这 2 者就能够让一个算法变的很弱小,所以当前当你设计机器学习算法的时候肯定要思考本人的样本规模,抉择适合的模型适应你的数据,如果你有很多很多的数据,那么能够抉择简单一点的模型,不能白白浪费你的数据!