学习曲线

评估

测试集评估在通过训练集让我们的模型学习得出其参数后,对测试集运用该模型,我们有两种方式计算误差:

对于线性回归模型,我们利用测试集数据计算代价函数$J$
对于逻辑回归模型,我们除了可以利用测试数据集来计算代价函数外:

$$ J_{test}{(\theta)} = -\frac{1}{{m}{test}}\sum\limits{i=1}^{m_{test}}\log{h_{\theta}(x^{(i)}{test})}+(1-{y^{(i)}{test}})\log{h_{\theta}(x^{(i)}_{test})}$$

误分类的比率,对于每一个测试集样本,计算:

然后对计算结果求平均。

数据分为:训练集、交叉验证集、测试集

神经网络模型选取

模型选择的方法为:

使用训练集训练出10个模型

用10个模型分别对交叉验证集计算得出交叉验证误差(代价函数的值)

选取代价函数值最小的模型

用步骤3中选出的模型对测试集计算得出推广误差(代价函数的值)

Train/validation/test error

Training error:

$J_{train}(\theta) = \frac{1}{2m}\sum_\limits{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^2$

Cross Validation error:

$J_{cv}(\theta) = \frac{1}{2m_{cv}}\sum_\limits{i=1}^{m}(h_{\theta}(x^{(i)}{cv})-y^{(i)}{cv})^2$

Test error:

$J_{test}(\theta)=\frac{1}{2m_{test}}\sum_\limits{i=1}^{m_{test}}(h_{\theta}(x^{(i)}{cv})-y^{(i)}{cv})^2$

诊断偏差和方差

训练集误差和交叉验证集误差近似时:偏差/欠拟合

交叉验证集误差远大于训练集误差时:方差/过拟合

正则化和偏差/方差

选择$\lambda$的方法为:

使用训练集训练出12个不同程度正则化的模型
用12个模型分别对交叉验证集计算的出交叉验证误差
选择得出交叉验证误差最小的模型
运用步骤3中选出模型对测试集计算得出推广误差,我们也可以同时将训练集和交叉验证集模型的代价函数误差与λ的值绘制在一张图表上:

• 当 $\lambda$ 较小时,训练集误差较小(过拟合)而交叉验证集误差较大

• 随着 $\lambda$ 的增加,训练集误差不断增加(欠拟合),而交叉验证集误差则是先减小后增加

学习曲线

学习曲线是学习算法的一个很好的合理检验(sanity check)。学习曲线是将训练集误差和交叉验证集误差作为训练集样本数量($m$)的函数绘制的图表。

即,如果我们有100行数据,我们从1行数据开始,逐渐学习更多行的数据。思想是:当训练较少行数据的时候,训练的模型将能够非常完美地适应较少的训练数据,但是训练出来的模型却不能很好地适应交叉验证集数据或测试集数据。

  1. 高偏差得情况,随着训练数据得增加train cost和 cross test cost得值会很快相隔很近,并且train cost会很快达到平衡,且值比较高如下图

  1. 高方差的情况,随着训练数据增加train cost和corss test cost逐渐接近,并且两者直接间隔会比较大 如下图

步骤

  1. 使用更多得样本训练 ========》尝试解决高方差问题(欠拟合)
  2. 尽量使用更少得特征值拟合 =========》尝试解决高方差问题
  3. 尝试使用额外的特征值 =========》 尝试解决高偏差问题
  4. 尝试添加高阶特征值 =========》 修正高偏差
  5. 尝试缩小λ ========》 修正高偏差
  6. 尝试扩大λ ========》 修正高方差

对于特征值阶数,拟合和过拟合通过训练集和交叉训练集,得到

机器学习系统的设计

误差分析

误差分析(Error Analysis)的概念。这会帮助你更系统地做出决定。如果你准备研究机器学习的东西,或者构造机器学习应用程序,最好的实践方法不是建立一个非常复杂的系统,拥有多么复杂的变量;而是构建一个简单的算法,这样你可以很快地实现它。

学习算法的推荐方法为:

1.从一个简单的能快速实现的算法开始,实现该算法并用交叉验证集数据测试这个算法

2.绘制学习曲线,决定是增加更多数据,或者添加更多特征,还是其他选择

3.进行误差分析:人工检查交叉验证集中我们算法中产生预测误差的样本,看看这些样本是否有某种系统化的趋势

以我们的垃圾邮件过滤器为例,误差分析要做的既是检验交叉验证集中我们的算法产生错误预测的所有邮件,看:是否能将这些邮件按照类分组。例如医药品垃圾邮件,仿冒品垃圾邮件或者密码窃取邮件等。然后看分类器对哪一组邮件的预测误差最大,并着手优化。

类偏斜的误差度量

查准率(Precision)和查全率(Recall) 我们将算法预测的结果分成四种情况:

1.正确肯定(True Positive,TP):预测为真,实际为真

2.正确否定(True Negative,TN):预测为假,实际为假

3.错误肯定(False Positive,FP):预测为真,实际为假

4.错误否定(False Negative,FN):预测为假,实际为真

则:Precision=TP/(TP+FP)。例,在所有我们预测有恶性肿瘤的病人中,实际上有恶性肿瘤的病人的百分比,越高越好。

Recall=TP/(TP+FN)。例,在所有实际上有恶性肿瘤的病人中,成功预测有恶性肿瘤的病人的百分比,越高越好。

这样,对于我们刚才那个总是预测病人肿瘤为良性的算法,其查全率是0。

查准率和查全率之间的权衡

一种方法是计算F1 值(F1 Score),其计算公式为:

${{F}_{1}}Score:2\frac{PR}{P+R}$

选择使得F1值最高的阀值。