Coursera机器学习week6 笔记

Advice for applying machine learning

Deciding what to try next  

当我们运用训练好了的模型来预测未知数据的时候发现有较大的误差,我们下一步可以做什么?
1、获得更多的训练实例(通常是有用的,但代价大,一把使用下面的方法)

2、尝试减少特征的数量 

3、尝试获得更多的特征 

4、尝试增加多项式特征

5、尝试减少归一化程度 λ 

6、尝试增加归一化程度 λ  

EvaluaDng a hypothesis  

主要的误差有欠拟合和过拟合。

比如这个是过拟合,在训练集上很准,但在新的数据上就不怎么准了。

为了检验算法是否过拟合,我们将数据分成训练集和测试集,通常用 70%的数据作为训练集,用剩下 30%的数据作为测试集。很重要的一点是训练集和测试集均要含有各种类型的
数据,通常我们要对数据进行“洗牌”,然后再分成训练集和测试集。

对于线性回归模型,我们利用测试集数据计算代价函数 J 

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

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

 然后对计算结果求平均。 

Model Selection and Train/Validation/Test Sets

过拟合例子:

有十个模型:

显然次数越高的模型越能适合我们的训练数据,但适应训练数据集并不代表着能推广至一般情况。

我们需要使用交叉验证集来帮助选择模型。

使用 60%的数据作为训练集,使用 20%的数据作为交叉验证集,使用 20%的数据作为测试集

模型选择的方法如下:

1、使用训练集练出的10个模型

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

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

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

代价函数计算如下:

Diagnosing Bias vs. Variance

判断偏差和方差,运行一个算法不理想时,通常有两种情况:要么偏差比较大,要么方差比较大。

而出现的情况是要么欠拟合,要么过拟合。

第一个欠拟合(偏差),第二个正合适,第三个过拟合(方差)。

我们通常会通过将训练集和交叉验证集的代价函数误差与多项式的次数绘制在同一张图表上来帮助分析:

对于训练集,当d较小时,模型拟合程度更低,误差较大;随着 d 的增长,拟合程度提高,误差减小。 

对于交叉验证集,当 d 较小时,模型拟合程度低,误差较大;但是随着 d 的增长,误差呈现先减小后增大的趋势,转折点是我们的模型开始过拟合训练数据集的时候。

所以有如下规律:

训练集误差和交叉验证集误差近似时:偏差/欠拟合
交叉验证集误差远大于训练集误差时:方差/过拟合

Regularization and Bias/Variance

为了防止过拟合,我们可以选择归一化,但有时我们选择的过大或者过小。

第一个是过大,变成欠拟合了,第三个是过小,还是过拟合,只有第二个才是正合适。

我们选择一系列的想要测试的 λ 值,通常是 0-10 之间的呈现 2 倍关系的值(如:0,0.01,0.02,0.04,0.08,0.15,0.32,0.64,1.28,2.56,5.12,10 共 12 个)。

我们同样把数据分为训练集、交叉验证集和测试集。

 

选择λ的方法:

1、使用训练集训练出 12 个不同程度归一化的模型 

2、用 12 模型分别对交叉验证集计算的出交叉验证误差 

3、选择得出交叉验证误差最小的模型 

4、运用步骤 3 中选出模型对测试集计算得出推广误差,我们也可以同时将训练集和交叉验证集模型的代价函数误差与 λ 的值绘制在一张图表上:

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

当λ逐渐增大时,训练集误差逐渐变大(欠拟合)而交叉验证集先减小再增大。

Learning Curves

我们可以通过学习曲线来验证是高方差还是高偏差

高偏差:

高方差:

现在我们知道了怎样改进我们的算法了。

1、获得更多的训练实例(高方差)

2、尝试减少特征的数量(高方差)

3、尝试获得更多的的特征(高偏差)

4、尝试增加多项式特征(高偏差)

5、尝试减少归一化程度λ(高偏差)

6、尝试增加归一化程度λ(高方差)

Machine Learning System Design(机器学习系统的设计)

Prioritizing what to work on: Spam classification example

以垃圾邮件分类器算法为例:

为了解决这样一个问题,我们首先要做的决定是如何选择并表达特征向量 x。我们可以选择一个由 100 个最常出现在垃圾邮件中的词所构成的列表,根据这些词是否有在邮件中
出现,来获得我们的特征向量(出现为 1,不出现为 0),尺寸为 100×1。

为了构建这个分类器算法,我们可以做很多事,例如: 

1、收集更多的数据,让我们有更多的垃圾邮件和非垃圾邮件的样本 

2、基于邮件的路由信息开发一系列复杂的特征 

3、基于邮件的正文信息开发一系列复杂的特征,包括考虑截词的处理 

4、为探测刻意的拼写错误(把 watch 写成 w4tch)开发复杂的算法

当我们使用机器学习时,总是可以“头脑风暴”一下,想出一堆方法来试试。实际上,当你需要通过头脑风暴来想出不同方法来尝试去提高精度的时候,你可能已经超越了很多人了。

Error analysis  

通过误差分析,我们知道哪种类型的更容易被错误的分类。经常地这样做之后,这个过程能启发你构造新的特征变量,或者告诉你:现在这个系统的短处,然后启发你如何去提高它。

构建一个学习算法的推荐方法为: 

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

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

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

Error metrics for skewed classes  

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

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

2、正确否定(TN):预测为假,实际为真

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

3、错误否定(FN):预测为假,实际为假

查准率 = TP / (TP + FP)

查全率 = TP / (TP + FN)

Trading off precision and recall

到查准率和召回率作为遇到偏斜类问题的评估度量值。在很多应用中,我们希望能够保证查准率和召回率的相对平衡。

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

如果我们希望只在非常确信的情况下预测为真(肿瘤为恶性),即我们希望更高的查准率,我们可以使用比 0.5 更大的阀值,如 0.7,0.9。

如果我们希望提高查全率,尽可能地让所有有可能是恶性肿瘤的病人都得到进一步地检查、诊断,我们可以使用比 0.5 更小的阀值,如 0.3。

我们希望有一个帮助我们选择这个阀值的方法。一种方法是计算 F1 值(F1 Score),其计算公式为

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

Data for machine learning

下面有个填单词的例子:

事实上,如果你选择一个算法,可能是选择一个“劣等”的算法,但是有足够多的数据时,它看上去很有可能比其他的算法更好,甚至会比“优等算法”更好。

因此偏差问题,我么将通过确保有一个具有很多参数的学习算法来解决,以便我们能够得到一个较低偏差的算法,并且通过用非常大的训练集来保证。

原文地址:https://www.cnblogs.com/xingkongyihao/p/8435691.html