Coursera机器学习-第六周-Advice for Applying Machine Learning
Posted 豆芽炒粉丝
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Coursera机器学习-第六周-Advice for Applying Machine Learning相关的知识,希望对你有一定的参考价值。
Evaluating a Learning Algorithm
先来看一个有正则的线性回归例子:
当在预测时,有很大的误差,该如何处理?
1.得到更多的训练样本
2.选取少量的特征
3.得到更多的特征项
4.加入特征多项式
5.减少正则项系数
λ
6.增加正则项系数
λ
很多人,在遇到预测结果并不理想的时候,会凭着感觉在上面的6个方案中选取一个进行,但是往往花费了大量时间却得不到改进。
于是引入了机器学习诊断,在后面会详细阐述,
怎样用你学过的算法来评估假设函数 ,讨论如何避免 过拟合和欠拟合的问题。
对于这个简单的例子,我们可以对假设函数 hθ(x) 进行画图 ,然后观察图形趋势, 但对于特征变量不止一个的这种一般情况 ,还有像有很多特征变量的问题 想要通过画出假设函数来进行观察,就会变得很难甚至是不可能实现。因此, 我们需要另一种方法来评估我们的假设函数 。
如下,给出了一种评估假设函数的标准方法:
将这些数据集分为两个部分:Training set 和 Test set, 即是 训练集和测试集,
其中一种典型的分割方法是, 按照7:3的比例 ,将70%的数据作为训练集, 30%的数据作为测试集 。
PS:如果数据集是有顺序的话,那么最好还是随机取样。比如说上图的例子中,如果price或者size是按递增或者递减排列的话,那么就应该随机取样本,而不是将前70%作为训练集,后30%作为测试集了。
接下来 这里展示了一种典型的方法,你可以按照这些步骤训练和测试你的学习算法 比如线性回归算法 。首先 ,你需要对训练集进行学习得到参数 θ , 具体来讲就是最小化训练误差 J(θ) ,这里的 J(θ) 是使用那70%数据 来定义得到的,也就是仅仅是训练数据 。接下来,你要计算出测试误差,用 Jtest(θ) 来表示测试误差, 那么你要做的就是 取出你之前从训练集(Training set)中学习得到的参数 θ 放在这里, 来计算你的测试误差 Jtest(θ)
Jtest(θ) 分为Linear Regreesion与Logistic Regression:
Linear Regreesion error:
Logistic Regression error:
假如你想要确定对于某组数据, 最合适的多项式次数是几次 ?怎样选用正确的特征来构造学习算法 或者假如你需要正确选择 学习算法中的正则化参数λ ,你应该怎样做呢?
Model Selection:
1.首先,建立d个model 假设(图中有10个,d表示其id),分别在training set 上求使其training error最小的θ向量,那么得到d个 θ
2.然后,对这d个model假设,带入 θ ,在cross validation set上计算 JCV ,即cv set error最小的一个model 作为 hypothesis,如下图中 |J(CV)| 在第4组中最小,便取d=4的假设。
PS: 其实d表示dimension,也就是维度,表示该hypothesis的最大polynomial项是d维的。
PS’: 一般地,
|J(CV)|
是大于等于
|J(train)|
的,| * |表示数量
选择第一个模型( d=1 ), 然后求训练误差的最小值 Jtrain(θ(1)) 这样你就会得到 一个参数向量 θ(1) 然后你再选择第二个模型( d=2 ) 二次函数模型 ,进行同样的过程 这样你会得到另一个参数向量 θ(2) ,以此类推,直到第十个模型( d=10 ),十次函数模型,训练误差最小值 Jtrain(θ(10)) 。
接下来,我们需要做的是对所有这些模型,求出测试集误差(Test Error),依次求出 Jtest(θ(1)) ~ Jtest(θ(10)) 中选取测试集误差最小的作为多项式模型。
这里选择的是五项式。那么问题来了,现在我想知道这个模型能不能很好地推广到新样本,我们还能通过测试集来验证一般性吗?这看起来似乎有点不合理,因为我们刚才是通过测试集跟假设拟合来得到多项式次数
d
这个参数,也就是说我们选择了一个能够最好地拟合测试集的参数
所以,为了解决这个问题,在模型选择中,我们将数据集不仅仅是分为训练集,测试集,而是分为训练集,交叉验证集和测试集{60%,20%,20%}的比例
一种典型的分割比例是 将60%的数据分给训练集,大约20%的数据给交叉验证集 ,最后20%给测试集。这个比例可以稍微调整,但这种分法是最典型的。
按照上面所述的步骤,这里不再赘述! (详情在上面Model Selection下面有解释)
Bias vs. Variance
当你运行一个学习算法时 ,如果这个算法的表现不理想, 那么多半是出现 两种情况 :要么是偏差比较大, 要么是方差比较大, 换句话说, 出现的情况要么是欠拟合, 要么是过拟合问题 。
那么这两种情况, 哪个和偏差有关, 哪个和方差有关, 或者是不是和两个都有关 。搞清楚这一点非常重要 ,因为能判断出现的情况, 是这两种情况中的哪一种, 其实是一个很有效的指示器, 指引着可以改进算法的 ,最有效的方法和途径 。
1. bias指hypothesis与正确的hypothesis(如果有的话)的偏差.
2. varience是指各样本与hypothesis的偏差和
先来看一个总体概括:
高偏差(欠拟合) —-High bias(underfit)
平衡(正好)—Just right
高方差(过拟合)—-High variance(overfit)
从下图,横轴表示多项式的次数d,纵轴表示误差error,我们可以看出,当d很小时,也就是处于underfit状态时, Jtrain(θ) 与 JCV(θ) 差不多大小,随着d增大, JCV(θ) 远远大于 学习进度报告第六周
机器学习- 吴恩达Andrew Ng 编程作业技巧 for Week6 Advice for Applying Machine Learning