Evaluating a learning algorithm
1. Design what to do next
在预测房价的学习例子,假如你已经完成了正则化线性回归,也就是最小化代价函数J的值。假如在你得到你的学习参数以后把它应用到放到一组新的房屋样本上进行测试,发现在预测房价时产生了巨大的误差。
要想改进这个算法,应该怎么办?
其中一种办法是使用更多的训练样本,但是这个办法不总是有用;
也许需要更多的特征,或者减少特征;
减小或增大正则化参数lambda的值;
…
机器学习诊断能够让你深入理解系统哪里工作,哪里不工作或者存在问题。
2. Evaluating a hypothesis
如何评估假设函数?下面讨论如何避免过拟合和欠拟合问题。
如何判断一个假设函数是过拟合的?
对于简单的例子,可以对假设函数h(x)进行画图,然后观察图形趋势。但对于特征变量不止一个的这种一般情况,想要通过画出假设函数来进行观察就会变得很难甚至是不可能实现。因此,我们需要另一种方法来评估我们的假设函数。 如下给出了一种评估假设函数的标准方法,假设我们有这样一组数据组,在这里我只展示出10组训练样本。为了确保我们可以评估我们的假设函数,将这些数据分成两部分。按照7:3的比例将70%的数据作为训练集,30%的数据作为测试集。如果这组数据有某种规律或顺序的话,那么随机选择70%作为训练集,剩下的30%作为测试集。如果数据已经随机分布了,可以选择前70%和后30%.
接下来展示了一种典型的方法,你可以按照这些步骤训练和测试你的学习算法 比如线性回归算法。 首先,你需要对训练集进行学习得到参数θ。 具体来讲就是最小化训练误差J(θ)。 这里的J(θ)是使用那70%数据。 然后计算出测试误差, JtestJtest来表示测试误差.使用包含参数θ的假设函数对每一个测试样本进行测试,然后通过假设函数和测试样本计算出mtest个平方误差. 这是使用线性回归和平方误差标准时测试误差的定义.
如果是考虑分类问题,比如说使用逻辑回归.训练和测试逻辑回归的步骤与之前所说的非常类似. 唯一的区别是现在我们使用的是mtest个测试样本.测试误差Jtest(θ)叫误分类率,也被称为0/1错分率. 当你的假设函数h(x)的值大于等于0.5,并且y的值等于0或者当h(x)小于0.5并且y的值等于1,这个误差等于1.用错分率误差来定义测试误差.
3. Model selection and Train/Validation/Test sets
模型选择问题:
怎样选用正确的特征来构造学习算法?
选择学习算法中的正则化参数λ?
…
数据集的划分:
通常划分为3部分,按照6:2:2分为训练集、验证集和测试集,定义训练误差 交叉验证误差 和测试误差。
我们的做法是训练多个不同的模型,使用验证集去选择交叉验证最小的模型,最后使用测试集估计模型的泛化误差。