吴恩达第六讲[应用机器学习的建议] -- 评估学习算法

一、Evaluating a Hypothesis(评估假设)

即使我们已经实现了某种算法,但是我们可能会发现这种算法存在很大的问题,这就涉及到了模型的选择和改进。

在模型选择之前,我们先来看些该如何评估一个模型。

对于有2个特征的假设函数来说,我们很容易通过画图来判断它是否过拟合,下图就是典型的过拟合情况:

这是特征变量比较少的情况,我们可以很容易看出这是过拟合的情况。那如果是特征变量比较多的情况呢?可能有100个甚至更多的特征变量?这种情况使用图形去观察是否过拟合会变得非常复杂,甚至你根本不可能去实现它。

下面给出一张评估假设函数的标准方法:即,将使用的数据集分为训练集和测试集,比较典型的做法是按照训练集:数据集=7:3的比例进行分割。


强调:若数据已经随机分布了,可以选择前70%作为训练集,后30%作为测试集,但是如果数据集本身是有序的,则最好随机选择,或者现将数据顺序打乱,再按顺序选择。

1、线性回归的训练/测试过程。
S1:训练选择合适的学习参数Θ值,使得J(Θ)的值最小。
S2:计算测试误差。
  
2、logistic回归的训练/测试过程。
S1:训练选择合适的学习参数Θ值,使得J(Θ)的值最小。
S2:计算测试误差。

S3:误分类率(0/1分类率)

二、Model Selection and Train/Validation/Test Sets(模型选择以及训练集/验证集/测试集)

(d = degree of polynomid)

如上图,在测试集中,通过对每一个多项式选择一个Θ使这个多项式的J(Θ)值最小,找到所有多项式对应的Θ值,比较所有的J(Θ)值,最小的代价函数对应的d就是我们要选择的d,它使得最小,本题的结果是d=5。

因为选择d是根据测试集的代价函数选择的,因此这个d对代价函数来说一定是使得代价函数最小的,但是对于另一个测试集不一定会达到很好的效果,由此,引入了模型选择。

模型选择将数据分为了3部分:训练集、交叉验证集(Cross Validation,简称CV)、训练集。一般按照训练集:验证集:测试集=6:2:2。

训练误差/验证误差/测试误差:
训练误差(training error):

交叉验证误差:

测试误差:

模型选择:

如上图,在验证集中,通过对每一个多项式选择一个Θ使这个多项式的J(Θ)值最小,找到所有多项式对应的Θ值,比较所有的J(Θ)值,最小的代价函数对应的d就是我们要选择的d,它使得最小,本题的结果是d=4。

为什么使用这种方法可以解决上面提到的在测试集中效果好,但是在另一个测试集中可能不太好的问题呢?
因为我们选择d,是由验证集中的数据训练得到的,在此过程中,测试集并没有参与,避免了测试集的过拟合,因此我们可以使用这个模型来评估测试集的泛化误差。

整理下具体步骤:
S1:对每一个多项式利用训练集优化Θ值,选择一个Θ值,使得这个多项式的训练误差最小。
S2:使用S1中的Θ值,利用交叉验证集,找到最小的交叉验证集对应的d。
S3:用S2中的d,评估测试集的泛化误差。(因为测试集没有参与训练找出d的过程)
 

猜你喜欢

转载自blog.csdn.net/xueluowutong/article/details/85249213