您的位置:首页 > 其它

Coursera机器学习(Andrew Ng)笔记:ML算法指导与系统设计

2017-05-10 10:53 162 查看

ML算法指导与系统设计

机器学习初学者,原本是写来自己看的,写的比较随意。难免有错误,还请大家批评指正!对其中不清楚的地方可以留言,我会及时更正修改

当机器学习的效果不理想时,可以尝试以下操作:

1 获取更多的训练数据样本

2 减少特征数量

3 增加一些额外的特征

4 多项式特征

5 增加或减小参数λ

实际使用时,不能只随机使用一种方法,下面我们来探索一些方法来进行诊断,帮助进行选择上述方法。

评估假设函数

一个假设函数可能在训练集上误差很低,但在新的数据集上可能仍旧不准确(过拟合),我们可以把训练样本分成训练集和测试集(一般按7:3的比例)。使用这两个数据集的过程如下:

1 使用训练集进行最小化Jtrain(Θ)得到Θ

2 计算测试集误差Jtest(Θ)

-测试集误差-

1 对于线性回归:Jtest(Θ)=12mtest∑mtesti=1(hΘ(x(i)test)−y(i)test)2

2 对于分类问题(又称作0/1误分类误差):

err(hΘ(x),y)={1if hΘ(x)≥0.5 and y=0 or hΘ(x)<0.5 and y=10otherwise

对于测试集的平均测试误差可以表示为:

TestError=1mtest∑i=1mtesterr(hΘ(x(i)test),y(i)test)

模型选择和训练/验证/测试集

为了选择一个更合适的模型,我们可以选择多个不同阶数的假设函数(例如d=1,2,3...),分别来看一看它的误差结果。

这里,我们还使用一个交叉验证集,即将训练样本分成3部分,分别为训练集、交叉验证集、测试集,一般按照6:2:2的比例进行分配,现在我们可以计算三个不同的误差值

1 使用不同阶数的假设函数在训练集上进行训练得到Θ(d)

2 使用Θ(d)在交叉验证集上计算误差,得到使得误差最小的d

3 估算泛化误差Jtest(Θ(d))

偏差Bias 和方差 Variance

学习算法的效果不理想,要么是偏差大,要么是方差大,对应的分别是欠拟合和过拟合。搞清楚偏差和方差的关系,可以帮助我们更好的找到算法的问题所在,有效改进算法。

训练集误差:Jtrain(θ)=12m∑mi=1(hθ(x(i))−y(i))2

交叉验证误差:Jcv(θ)=12mcv∑m[cv]i=1(hθ(x(i)cv)−y(i)cv)2

对于训练集来说,随着假设函数次数的增大,算法由欠拟合过渡到过拟合,误差减小。

对于测试集或交叉验证集来说,当假设函数次数很小或很大时,欠拟合或过拟合均造成交叉验证误差很大,而当次数是当时,交叉验证误差达到最小。



对应的,左边的这一端就是高偏差问题,右边的这一端就是高方差问题。

正则化与偏差/方差

在过拟合的情况下,我们来看一下λ对误差的影响。

当λ很小时,相当于没有进行正则化,依旧是过拟合的状态,此时,训练误差很小,而交叉验证误差很大。当λ很大时,惩罚过于严重,假设函数变成一条水平线,此时的训练误差和交叉验证误差都很大。



学习曲线

首先来看再给定假设函数次数的情况下,训练集大小与误差之间的关系

当训练集样本很小时,假设函数可以很容易的拟合的很好,训练误差也很小;当样本数量增大时,想让假设函数拟合的更好,就变得更加困难了,因此,训练误差会越来越大。

显然,当训练集样本数量很少时,泛化程度很差,交叉验证误差就很大。只有当训练集样本数量很大时,才能够更好的拟合数据,交叉验证误差较小。



考察高偏差的情况,当样本数量很大时,训练集误差和交叉验证误差都很高,此时增大训练样本来改善算法性能显然是没有意义的。



再来考察高方差的情况,当训练样本数量增大时,拟合变的越来越困难,训练误差增大,但总体来说还是很小。对于交叉验证误差,由于假设函数处于过拟合的状态,交叉验证误差会一直很大,当训练样本数量增大时,交叉验证误差呈递减趋势。高方差的一个主要特点是,当训练样本数量m很大时,训练误差和交叉验证误差有很大的差距。

总体上,随着m的增大,两个误差是逐渐靠近的,因此,对于高方差的情况,增加样本数量可能会有帮助。



如何选择有效的方法

1 获取更多的训练数据样本:高方差

2 减少特征数量:高方差

3 增加一些额外的特征:高偏差

4 增加多项式特征或次数:高偏差

5 减小参数λ:高偏差

6 增大参数λ:高方差

机器学习系统设计

推荐方法步骤

1 首先构建一个很简单的机器学习算法,保证能够快速实现它,即使结果不完美,也要运行一遍,并使用交叉验证集来检验数据

2 画出学习曲线,看算法是否存在高偏差或高方差,或者其他问题。分析之后,再来决定是否使用更多样本,更多特征或一些其他方法

3 误差分析:对验证集中造成较大误差的样本进行分析,寻找这些样本可能存在的规律,这个过称可能启发出一些新的思路和想法。在交叉验证集上进行误差分析

数值评估的重要性

如交叉验证错误率等误差度量值。设定某个实数来评估学习算法,并衡量她的表现

偏斜类问题Skewed Classes

使用合适的误差度量值,就是偏斜类问题。

-查准率precision和召回率recall-

希望检测的出现较少的类用来计算查准率和召回率



查准率与召回率之间的权衡

在很多应用中,我们希望能够保证查准率和召回率的相对平衡。

比如在逻辑回归的例子中,当hθ(x)≥threshold是,预测结果为1,当hθ<threshold时,预测结果为0。在之前的例子中,threshold=0.5,实际上,我们可以根据实际情况更改阈值。在癌症预测的例子中,阈值增大,会得到更高的查准率和更低的召回率;阈值减小,会得到更高的召回率和更低的查准率。



-F 值-

F值可以用来作为对查准率和召回率平衡的一个度量,一般也叫做F1值,其计算公式如下

F1=2PRP+R

F值越大,说明查准率和召回率的平衡性越好

机器学习中的数据

一个较大的训练集可以帮助提高学习算法的性能,但在特征信息不足等情况下,再多的训练集也没用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息