机器学习入门笔记(七)----机器学习实用方法

来源:互联网 发布:成都java培训费用多少 编辑:程序博客网 时间:2024/06/06 03:12

当我们实现一个机器学习模型后,发现效果并不是很理想,改进的方法有非常多,那么如果诊断当前模型,选择一条合适的道路去优化就成了一项必不可少的技能,否则‘拍脑门’的胡乱尝试,将会是一件非常浪费时间的事情,且最终也不一定能得到很好的效果。

1. 评估一个假设模型:

我们通过算法得到一个假设模型后,该模型可能是欠拟合或过拟合的。即在训练数据上表现的比较好,但是在额外的位置数据中,其实并不能很好的进行预测。那么如何通过掌握的已有数据进行模型的诊断呢?

通常我们将数据集分为两部分:训练集、测试集。典型的分配比例是 7:3。

然后在训练集上训练模型,将得出的模型在测试集上进行测试,例如:

(1)线性回归时,计算测试集的平方误差

(2)分类问题时,计算对测试集的错分率

通过这样一个简单的测试,可以初步的对模型进行诊断。

2. 模型选择

上面1中锁提供的思想,为我们提供了进行模型选择的方法。

我们可以列举出有限个模型,对有限个模型利用训练集进行训练,得到最终的假设函数。然后通过在测试集上的测试,选择出表现最好的一个。

但通常会对1中的方法进行优化:将数据集氛围三个部分:训练集、交叉集、测试集,经典分配比例:6:2:2。

方法:

(1)训练集训练模型

(2)交叉集选择表现较好模型

(3)测试集测试实际表现

原因:

如果仅有训练集,模型可能对训练集过拟合,对其他数据表现不好。

如果仅有训练集与测试集,模型可能对测试集过拟合。

分为三个集合,通过交叉集对模型进行选择,测试集对模型进行验证,可以得到一个较好的结果。

3. 偏差与方差

高偏差意味着欠拟合,高方差意味着过拟合。我们需要做的是在这两者之间寻找到一个最佳的平衡点。

例如,我们有n个模型d1 d2 ... dn。分别对应1次模型、二次方模型 ... n次方模型。

n很小时,例如d1一次模型,模型为一条直线,对数据可能是欠拟合的,此时偏差与方差均较大。随着n增加,模型复杂度升高,更好的拟合训练数据,偏差与方差变小。随着n继续增加,模型对数据过拟合,偏差继续减小,但是方差却开始变大。因此图中剪头指向的d点,是较好的一个模型复杂度的选择点。该点处对应的模型,在交叉集上表现则是最好的一个。


4.正则参数lamda

我们对模型进行正则化,是为了解决过拟合问题。但是如果正则化项选择不好,反而会对模型产生负面影响。
如果lamda过大,对theta惩罚就大,最终会得到一个近似 直线的模型,导致欠拟合。
如果lamda过小,起不到应有作用,仍然会过拟合。
这里可以利用上面的方法对lamda进行选择:
(1)列举有限个lamda取值,例如:0.01 0.02 0.04 0.08 ... 10.24
(2)利用n个lamda构建n个正则化模型,对模型进行训练,得到n组theta。
(3)用n组theta构建n个非正则化的模型,对交叉集进行预测,得到表现最好的。
(4)利用测试集验证上述得到的lamda与theta构成的正则化模型。

5. 学习曲线

我们训练的模型可能最终的效果并不是很好, 那么从哪个点入手去改善更为恰当呢?
这里介绍一种方法: 绘制学习曲线: 随着训练样本数量m增加,训练集和交叉检验集的偏差变化情况已经两者比较关系.
(1) 第一种情况:
当m很小时,模型在训练集上偏差较小,但对交叉验证集的偏差较大.随着m增加, 训练集上的偏差增加并超过预期表现,交叉验证集的偏差减小,两者趋于相等的状态.

这种情况是高偏差的, 欠拟合的. 很明显,这是及时再增加样本的数量也不能对情况的改善有任何帮助.
(2) 第二种情况:
当m很小时,模型在训练集上偏差较小,但对交叉验证集的偏差较大.随着m增加, 训练集上的偏差增加,但是在可接受的预期表现内.交叉验证集上的偏差表现下降,但距离训练集误差表现还有很大差距.

这种情况是高方差的. 通过曲线可以看出,此时增加样本数量对两者更趋于相等是有帮助的.

6. 优化手段

通常我们的优化手段有:
(1) 获取更多样本 : 适用于高方差
(2) 减少特征数量 : 适用于高方差
(3) 增加特征数量 : 适用于高偏差
(4) 增加多项式特征 : 适用于高偏差
(5) 增大lamda : 适用于高方差
(6) 减小lamda : 适用于高偏差

7. 神经网络优化

神经网络通常设置一个隐藏层是一个默认较好的做法. 复杂的神经网络计算量较大,但是稍复杂的网络加上正则化方正过拟合也是比较好的方法. 可以设置多个具备不同隐藏层数的模型, 利用本文开始的方法(训练集分为三个部分),选择一个表现最好的.

8.偏差分析

在着手一个机器学习问题时, 推荐的做法是尽快的动手实现一个简单的模型, 尽管可能它的表现不会很好, 但是它会是后续持续优化中,方法决策的一个很好的工具, 相比利用大量的时间空想一个复杂的模型, 这种方法是更高效的。
后续持续优化的方法有很多:
(1)例如我们实现一个分类模型后,他的表现并不是很好。我们可以手工的分类错误的样本集进行分析,分析具有哪类特征的错分样本比例更大,那么对于这类特征进行优化可以对模型的表现有所提升。
(2)例如一个不具备特征a的分类模型,错分率在5%,加入a后可以下降到3%。那么a这个特征就是有意义的。如果只是下降到4.8、没有影响,则a是无意义的。

9.偏斜分类

评判一个模型表现好坏,一个简单绝对的错分率数值,并不一定能正确的衡量。例如一个肿瘤良性、恶性分类的模型,达到1%的错分率,听起来还不错。但如果仅以这个绝对数字评判,并不恰当。因为良性、恶性的分类是基督偏斜的,即现实情况中可能只有0.1%是恶性的。对于这个分类,一个不判断特征,永远判定为良性的模型的错分率都要更小,达到0.1%。
这里引入四个分类:
真阳性:预测与实际均为阳性
真阴性:预测和实际均为阴性
假阳性:预测为阳性,实际为阴性
假阴性:预测为阴性,实际为阳性
两个值:
(1)查准率(Precision):预测为阳性中,实际也是阳性的概率 = 真阳性 /(真阳性+假阳性)
(2)召回率(Recall):实际真阳性中,被准确预测的概率 = 真阳性 /(真阳性+假阴性)
两个值都是越高越好。这两个值可以作为评估一个分类模型表现的标准来使用。
例如在前面的分类模型中,当h>0.5我们预测y为1.如果将这个阈值增加到0.7,我们的查准率将会增加,召回率减小。我们可以针对实际问题,选择我们希望查准率和召回率哪个更高,来选择阈值。
但是,两个值,某一个很高,另一个过低,也并不是一个好模型。当我们有多个模型,分别表现出不同的查准率和召回率时,如果考我们自己判断,将会很纠结这个选择,从而降低效率。
这里再引入一个值F值,它综合了查准率和召回率的综合表现:
F=2PR / (P+R)
利用这个值,我们便可以直观的通过得分来进行模型选择,从而实现通过具体的数值标准,做出模型优化方向的决策。

10. 更多的数据?

很多的实验表明:对于同目标的不同流行算法,在随着给出训练数据的量增加到很大时,算法的表现差别并不是很大,甚至更“差”的算法会反超。于是有了这样一句话:有价值的并不是你使用了什么算法,而是你拥有多少数据。
那么这一点在什么条件下是成立的,什么条件下是无效的呢?
首先,特征集X必须具有足够的特征在支撑对y值的预测。通常的做法是,想象下在这个实际问题领域的专家,拿到特征集X是否能准确的对房价准确预测呢?这可以证明X是否满足足够丰富的条件。比如,房价预测中,如果仅有房屋面积这一个特征,任何一个多么厉害的专家也没办法准确的预测房价。
其次,具有手机大量数据和利用大量数据训练模型的能力。
具备条件后,如何证明是有效的呢?
(1)X特征足够丰富,避免了高偏差问题。
(2)数据量足够大,避免了高方差的问题。
因此可以获得一个表现的很好的模型。

原创粉丝点击