机器学习笔记六

来源:互联网 发布:网络直播评论性文章 编辑:程序博客网 时间:2024/06/14 23:16

机器学习应用建议

决定下一步做什么

调试学习算法

如果我们正利用正则化线性回归来预测房价,代价函数如公式

J(θ)=12mi=1m(hθ(xi)yi)2+λjnθ2j

备注Andrew Ng的ppt中公式有误,我这里更改了过来

然而,当你在新数据集上测试你的假设时,会发现预测结果的错误率不可接受。那下一步该怎样做?

  • 获取更多的训练数据
  • 尝试更小的特征集
  • 尝试获取额外的特征
  • 尝试添加多项式特征
  • 尝试减小λ
  • 尝试增大λ

机器学习诊断

-什么是诊断?
诊断就是一种测试,该测试可以让你更加清楚哪些有利于学习算法,哪些有害于学习算法,给你更好地改善学习算法性能提供更多指导。

诊断很费时,但很有用。

评价假设

对假设进行评价

如果选择的特征过多,模型可能对不在训练集中的数据缺乏泛化能力。
如图1所示,这里选择了4个特征[x1,x2,x3,x4],假设为:

hθ(x)=θ0+θ1x+θ2x2+θ3x3+θ4x4

这种请情况就是过拟合。过拟合造成对训练数据拟合非常好,但对测试数据缺乏泛化推广能力。

线性过拟合
图1 过拟合

线性回归训练/测试过程

-通过最小化训练误差J(θ)来学习参数θ

-计算测试误差

逻辑回归训练/测试过程

-通过训练数据来学习参数θ

-计算测试集误差
Jtest(θ)=1mtestmtesti=1(y(i)testloghθ(x(i)test)+(1y(i)test)loghθ(x(i)test))

-误分类误差

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

对于如图1所示的过拟合例子,一旦参数θ0,θ1,....,θ4对训练集能够很好地拟合,训练集获得的参数误差可能比真是的泛化误差低。
通过测试集误差Jtest(θ(5))来反映模型泛化能力的好坏,Jtest(θ(5))通常可能是泛化误差的乐观的估计。选择额外的参数能够对测试集进行拟合。

训练/验证/测试误差

训练误差:

Jtrain(θ)=12mi=1m(hθ(x(i))y(i))2

交叉验证误差:

Jcv(θ)=12mcvi=1mcv(hθ(x(i)cv)y(i)cv)2

训练误差:

Jtest(θ)=12mtesti=1mtest(hθ(x(i)test)y(i)test)2

诊断偏差vs.方差

偏差和方差

如下三张图分别代表了高偏差(欠拟合)、“正好”、高方差(过拟合)

这里写图片描述
图2 欠拟合-适中-过拟合

训练误差:

Jtrain(θ)=12mi=1m(hθ(x(i))y(i))2

交叉验证误差:

Jcv(θ)=12mcvi=1mcv(hθ(x(i)cv)y(i)cv)2

随着多项式维度d的增大,训练误差逐渐减小;但交叉验证误差开始时会随多项式维度增大而减小,但当维度超过临界值后,交叉验证误差会随着维度的增大而增大。因此,多项式维度要选择适当大小的值。

诊断偏差vs.方差

如果学习算法的性能比预期的差(Jcv(θ)Jtest(θ)高)。那它是偏差问题还是方差问题?

从图2可以看出偏差(欠拟合)问题和方差(过拟合)问题的差别:
-偏差问题(欠拟合):
训练误差Jtrain(θ)大,测试误差与交叉验证误差也较大并且近似相等;
-方差问题(过拟合):
训练误差Jtrain(θ)小,交叉验证误差远大于训练集误差(Jcv(θ)>>Jtrain(θ));

正则化和偏差/方差

线性回归正则化

选择的模型为:

hθ(x)=θ0+θ1x+θ2x2+θ3x3+θ4x4

代价函数为:
J(θ)=12mi=1m(hθ(x(i))y(i))2+λ2mj=1nθ2j

尝试不同的正则化参数λ,可以做出交叉验证集的代价函数Jcv(θ),训练集的代价函数Jtrain(θ)与正则化参数λ的关系曲线,如图所示
这里写图片描述

从图中可以看出,当正则化参数λ较小时,训练集的代价函数Jtrain\lambdaJ_{cv}(\theta)\lambda\lambda$参数要适中。

学习曲线

选择不同的训练集规模(即m不同),交叉验证集的代价函数Jcv(θ),训练集的代价函数Jtrain(θ)也会发生变化。训练集的代价函数JtrainmJ_{cv}(\theta)\lambda$增大而减少,如图所示。
这里写图片描述

高偏差(欠拟合)

当学习算法经历高偏差时,增加过多的训练集数据也不会由太大帮助,因为随着样本数m的增大,训练集的代价函数JtrainmJ_{cv}(\theta)\lambdaJ_{cv}(\theta)J_{cv}(\theta)$。增长曲线如图所示。
这里写图片描述

高方差(过拟合)

当学习算法经历高方差时,增加过多的训练集数据可能会很有用,因为随着样本数m的增大,训练集的代价函数JtrainmJ_{cv}(\theta)\lambdaJ_{cv}(\theta)J_{cv}(\theta)$。增长曲线如图所示。
这里写图片描述

决定下一步该怎么做

回到开始提到的问题,当算法性能不理想时,该如何进行处理:
- 高方差——获取更多的训练数据
- 高方差——尝试更小的特征集
- 高偏差——尝试获取额外的特征
- 高偏差——尝试添加多项式特征
- 高偏差——尝试减小λ
- 高方差——尝试增大λ