Machine Learning(Andrew)Week6(上)

来源:互联网 发布:户型优化设计合同 编辑:程序博客网 时间:2024/05/30 02:53

采用机器学习的一些建议

类似引言的部分

假设你已经训练好了一个线性回归模型来预测房屋的价格,但是你在做新房屋价格预测的时候,发现误差太大了,这时该怎么办呢?

线性回归成本函数:

(1)找更多的训练数据

(2)减少特征数

(3)增加特征数

(4)增加多项式特征(比如x1x2,x1^2……)

(5)增大λ

(6)减小λ

机器学习诊断

诊断(Diagnostic):就是一种对学习算法是否工作的测试,同时指导提高算法性能。

诊断会费些时间来实现,但是实现之后你就可以有效的利用时间了。

对hypothesis的评估

在实现房屋预测的系统时,我们得到模型:

该模型对训练数据有很好的拟合

 

但是,在对新房屋预测时,却表现很糟糕。显然,发生了过拟合。我们有没有办法,让模型还未投入新数据使用之前,就检验是否过拟合呢?

有!通常数据D并不是全部都拿当训练数据的,我们会偷偷藏起来一部分做测试来检验模型。

一般是70%拿去当训练数据,拿30%做测试。30%的数据做测试,其实就是看模型的泛化能力,在《《A Few useful things to Know About machine Learning》读后感》中说到,泛化能力,其实就是在新的数据上的表现能力。


模型的选择/训练/验证/测试

看上面房屋预测的曲线图,如果参数θ在训练数据上拟合的很好的话,那J(θ)在训练数据上的错误就要比没看过的数据上小很多。

(就是Hsuan-Tien Lin所讲的Ein表现很好,而Eout实际比较大。这样EinEout就不接近了。)

如何选模型

所以,我们如何选择模型呢?

比如,我们要在上面的10个模型中做选择。选哪一个呢?

根据前面说的,需要测试误差。所以,70%的D去训练上面的h,求出了各自的参数θ。然后用30%的数据做测试求误差。假设,我们进行误差测试之后,发现h5,即d=5的模型误差很小。


我们选它做模型。

但是这里就有个问题,如果h5对30%的测试数据,存在运气很好的情况,它因为运气好而拟合的好,所以误差小。针对这样的情况,又想出了一个法子,进行交叉验证。就是把数据集分成三个部分:60%训练数据;20%交叉验证数据;20%测试数据。

这样就有三个数据集需要算误差:

误差的计算方式一样,但目的不一样。

第一个求误差是为了求参数θ。

第二个求误差是为了选出模型。

第三个求误差是为了测试模型好不好。

还是上面的10个模型选择问题。

(1)用训练数据求参数θ

(2)用交叉验证数据求出误差最小的模型

(3)用测试数据测试这个模型的泛化能力。

诊断bias和variance

这个在《《A Few useful things to Know About machine Learning》读后感》中也提到了。

Bias是预测的h们的平均值和实际的偏差;

Variance是预测的h们之间的差异。

拟合问题Andrew中Week3中也提到过。

可以看到,特征选择维度越高拟合的就越好,就会造成过拟合。当我们计算这三个模型的train error(简称Jtrain)和cross validation error(简称Jcv),发现:

观察这个图:发现特征维度低的时候,欠拟合,Jtrain和Jcv都比较大,接着二者随着特征增多而减少;特征增加到了一个程度之后,Jtrain继续减少,Jcv反而开始变大;特征维度很高时,Jtrain很小,Jcv很大,过拟合。

欠拟合时,bias大,Jtrain和Jcv都比较大,但是Jtrain≈Jcv;

过拟合时,variance大,Jtrain很小,Jcv很大,Jcv>>Jtrain。

为防止过拟合,我们采用的是正规化的方式,即在J后面加一项regularization项。(Week3(下)) 

合适的lambda

但是,λ的大小对拟合程度有很大影响: 

λ太大会使θj趋于0,最后只剩一个不用受惩罚的阈值θ0,造成欠拟合;

λ太小对θ影响就不大,还是过拟合。

所以λ要选的合适才行。

怎么选到合适的λ呢?以逻辑回归为例:

(1)数据集分为:训练集,交叉验证集和测试集。

(2)λ从0,0.01,0.02之后每个都是前一个的2倍,一直到10.24。一共12个λ。

(3)12个λ对应12个模型

 

(4)用训练数据集训练12个模型,分别求出它们的参数θ

(5)用交叉验证集求出Jcv最小的模型

(6)用测试集求(5)中选出的模型的泛化误差

看看λ的大小如何影响bias和variance:

大的λ,高bias,Jtrain≈Jcv,欠拟合

小的λ,高variance,Jtrain<<Jcv,过拟合

学习曲线

学习曲线是用来检验算法的学习效果。这里观察随着训练样本的数量(m)增加,Jtrain和Jcv的变化情况的曲线。

我们举个模型如下的例子:



  由上面可以看出,随着训练数据m增加,Jtrain增加,Jcv变小。所以,学习曲线为:

从学习曲线来考虑bias和variance问题——增加m

(1)高bias问题

如果模型是

可以看出模型欠拟合,这时增加m

 

发现拟合效果还是糟糕。

这说明了,如果一个模型高bias,Jtrain≈Jcv,增加训练数据量是没用的。

 

(2)高variance问题

对于高variance的问题,Jtrain<<Jcv,增加训练样本数量,可以减小Jtrain和Jcv之间的差距,可以提高模型的效果。

综上,增加训练样本数量,对高variance有用,对高bias作用不大。

总结

回到本节最开始的问题:

假设你已经训练好了一个线性回归模型来预测房屋的价格,但是你在做新房屋价格预测的时候,发现误差太大了,这时该怎么办呢?

(1)找更多的训练数据

(2)减少特征数

(3)增加特征数

(4)增加多项式特征(比如x1x2,x1^2……)

(5)增大λ

(6)减小λ

通过本节的分析,我们应该知道了它们的作用。

(1)找更多的训练数据——适用于高variance

(2)减少特征数——适用于高variance

(3)增加特征数——适用于高bias

(4)增加多项式特征(比如x1x2,x1^2……)——适用于高bias

(5)增大λ——适用于高bias

(6)减小λ——适用于高variance

神经网络和拟合问题

这是一个small的神经网络,参数少,很容易欠拟合,但是它计算很容易

这个的神经网络比较复杂,参数多,容易过拟合,计算复杂。用正规化项解决过拟合问题。

0 0
原创粉丝点击