您的位置:首页 > 其它

斯坦福机器学习第六周(模型选择、高偏差、高方差、学习曲线)

2017-10-26 19:31 429 查看
这篇文章主要讲解的是如何来对训练出来的代价函数进行评估,一起怎么处理

所遇到的各种问题。

0.引例

假如你已经训练好了一个代价函数来预测房价,然而你却发现用来预测新数据集时,其效果异常的糟糕。那我们接下来该怎么办呢?



可以看到方法有很多种,但是到底应该怎么来进行选择呢?当然绝对不能凭着感觉来。

1. Evaluating your hypothesis

评价一个模型(代价函数)的好坏总体上都是从训练过程中的代价值来进行评判的,其结果无非有三种:欠拟合,恰拟合,过拟合。我们都希望在训练的过程中能够得到最小的代价值,但是最终或许这并不是一个特别好的结果。因为此时有可能就出现了过拟合。所以,说一千道一万首先需要弄清楚的就是这个问题。



假若模型的特征维度只有1个维度,我们可以很直观的通过在数据集上画出代价函数的图像,来判断属于三种情况的哪一种。但问题是,几乎绝大多数问题面临的都是大于1维度的情况,很明显画图就不太现实了。

1.1 Cross Validation

对于已经确定好的模型(e.g. 多项式的次幂d,规则项的λ等超参数都已经确定,见1.2)来说,我们只需要将原有的数据集划分成两个部分训练集(train set),测试集或验证集(cross validation set/test set)。通常来说训练集和测试集的比值为7:3。其中,训练集仅仅是用来普通参数(非超参数),然后测试集来测试该模型的泛化误差(generalization error),该误差越小,说明模型的预测能力越强。



1.2 Hyper parameter and Model selection

超参数(hyper parameter),大多数机器学习算法都有超参数,可以设置来控制算法行为。超参数的值不是通过学习算法本身学习出来的,是因为这样的参数太难优化(例如d和λ)。所以超参数基本都是通过手动来进行挑选的,而所谓的模型选择(model selection)就是“训练”得到超参数的过程

如果仅仅是因为摸个模型的在训练集上表现得异常出色(代价值特别低)我们就选择该模型的或,未免就显得太武断了。因为此时就可能出现了过拟合的现象,所以我们就为数据集选择一个合适的模型,虽然特征冗余也会出现过拟合。而方法就是将原有的数据集分成训练集60%(training set)、交叉验证集20%(cross validation set)和测试集20%(test set),分别用于计算得到training error,cross validation error以及test error(即generalization error)。

1.2.1 对于不含有规则项的代价函数来说:



假定现在有10个备选模型,分别如下:

1.hθ(x)2.hθ(x)3.hθ(x)...10.hθ(x)=θ0+θ1x=θ0+θ1x+θ2x2=θ0+θ1x+⋯+θ3x3=θ0+θ1x+⋯+θdxd+⋯+θ10x10

用训练集分别将10个模型以对应的Jtrain(θ)进行训练;

用交叉验证集将10个模型训练得到的参数(θ),分别代入到对应Jcv中计算得到cross validation error;

选择第2步中最小cv error对对应的参数θ以及超参数d,用测试集将其代入Jtest(θ)中计算得到泛化误差;



1.2.2 对于含有规则项的代价函数来说:



我们知道λ的值不管是太大还是太小都不好,太大容易导致欠拟合,太小容易导致过拟合,那么如何才能得到一个折中的值呢?

先随机创建一系列的λ,i.d.λ∈{0,0.01,0.02,0.04⋯,10.24}(这是Ag的方法);

使用不同的d创建一系列的模型,也就是不同的假设函数hθ(x);

使用不同的d和不同的λ所构成的J(θ)在训练集上来训练得到参数θ(也就是两层嵌套的for循环来完成);

使用步骤3中得到的参数θ,分别在验证集上计算得到cv error Jcv(θ);

选择cv error最小情况下所对应的参数θ,λ;

使用第5步中得到的参数θ在测试集上计算得到generalization error Jtest(θ),以此来判断其泛化能力;



2. Bias and Variance

关于偏差和方差的详细解释可以参见这篇博客;下面是摘自知乎关于什么是偏差(bias),什么是方差(variance)的直观解释:

想象你开着一架黑鹰直升机,得到命令攻击地面上一只敌军部队,于是你连打数十梭子,结果有一下几种情况:

1.子弹基本上都打在队伍经过的一棵树上了,连在那棵树旁边等兔子的人都毫发无损,这就是方差小(子弹打得很集中),偏差大(跟目的相距甚远);

2.子弹打在了树上,石头上,树旁边等兔子的人身上,花花草草也都中弹,但是敌军安然无恙,这就是方差大(子弹到处都是),偏差大(同1);

3.子弹打死了一部分敌军,但是也打偏了些打到花花草草了,这就是方差大(子弹不集中),偏差小(已经在目标周围了);

4.子弹一颗没浪费,每一颗都打死一个敌军,跟抗战剧里的八路军一样,这就是方差小(子弹全部都集中在一个位置),偏差小(子弹集中的位置正是它应该射向的位置);

方差,是形容数据分散程度的,偏差,形容数据跟我们期望的中心差得有多远

由此我们就可以知道:

欠拟合等价于高偏差(high bias),因为训练得到的模型不能很好的拟合目标数据集,即过大的偏离了数据集;

过拟合等价于高方差(high variance),因为在训练集上过拟合,其图像走势的离散程度必定很大(如下图中的黑点)



因此,1.2.1中Jtraining(θ)与Jcross−validation(θ)同偏差与与方差的关系就如下图所示:



我们可以看出,如果d太小,就会出现欠拟合也就是高偏差;随着d慢慢增大,偏差逐渐减少,Jtraining(θ)和Jcrossvalidation(θ)的值也随之减小。但d超过最优值且逐步曾大后,就会出现过拟合现象,所以Jtraining(θ)会越来越小,Jcrossvalidation(θ)会越来越大。

1.2.2中Jtraining(θ)与Jcross−validation(θ)同偏差与与方差的关系就如下图所示:



当λ特别小时,几乎等于没有惩罚参数,所以必定导致过拟合出现高方差,此时的Jtrain(θ)就远小于Jcv(θ);随着lambda慢慢增大,对于参数的惩罚就越来越重,此时就会趋于恰拟合的状态,当然方差也会逐步减小;当λ超过最优值之后,就会导致惩罚过重(模型趋于y=b),出现欠拟合的现象,然后产生高偏差;

3. Learning curve

学习曲线(learning curve)是一个能有效帮助我们分析训练模型是否出现问题的工具。

3.1 Learning curve for high bias



从这个曲线我们可以看到:

当m很小的时候,Jtrain(θ)也很小,因为很容易就能拟合(甚至过拟合),但用这个训练好的模型在验证集上来验证,就会出现很差的效果Jcv(θ)异常的大;随着m的增大,Jtrain(θ)开始增大,Jcv(θ)开始减小;当m越来越大的时候,Jcv(θ)也越来越小,也就是说明模型的泛化程度越来越好;但随着m的增大,Jtrain(θ)也迅速增大,然后超过了最优值,虽然Jcv(θ)也在一直减少,但是始终不会达到最优状态且离最优值很远,故而出现高偏差。所以,如果一个模型如果出现了高偏差的话,增加训练集的数量就没有作用了。

3.2 Learning curve for high variance



从这个曲线我们可以看到:

当m较小时,同上面一样;随着m的增大,Jcv(θ)也逐渐变小,也就是说明模型的泛化程度越来越好;当m越来越大时,Jtrain(θ)的虽然持续在增长,但是几乎出现了停滞,很靠近最优的情况;且随着m的增长模型的泛化能力一直在增强,但同样增长得比较缓慢,故而出现了高方差。所以,如果一个模型如果出现了高方差的话,增加训练集的数量仍可以提高模型的性能。

3.2 Neural networks and overfitting



4.Conclusion



实例见坦福斯坦福机器学习第六周课后练习

5.Precise and recall



True Positive: 预测值是1,真实值也是1;

False Positive: 预测值是1,真实值是0;

False Negative:预测值是0,真实值是1;

True Negative:预测值是0,真实值也是0;

举例:



PRFscore=TPTP+FP=8080+20=0.8=TPTP+FN=8080+80=0.5=2PRP+R

在逻辑回归中,P与R的关系:



如何确定threshold?



一个字,试
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: