哲哲的ML笔记(十九:如何评估假设函数)

1个场景

假如你在用线性回归训练一个预测房价的模型,使用如下的代价函数
J=\frac{1}{2m}\sum_{i=1}^m(h_\theta(x^{i})-y^{i})+\lambda \sum_{j=1}^n\theta_j^2
但是发现在新数据集上进行TEST环节有了很大的误差,怎么办?

根据之前的学习,可以想到的方法有:

  1. 训练更多的样本
  2. 尝试更少的特征,目前使用x_1, x_2,…x_{100}, 从中挑选一小部分
  3. 其它维度获得特征
  4. 增加多项式特征,如x^2_1, x_1x_2…
  5. 增加/减少\lambda

我们不应该随机选择上面的某种方法来改进我们的算法,而是运用一些机器学习诊断法来帮助我们知道上面哪些方法对我们的算法是有效的
机器学习诊断法的意思是:这是一种测试法,你通过执行这种测试,能够深入了解某种算法到底是否有用。这通常也能够告诉你,要想改进一种算法的效果,什么样的尝试,才是有意义的

评估h_\theta(x)

得到一个非常小的训练误差一定是一件好事,但我们已经知道,仅仅是因为这个假设具有很小的训练误差,并不能说明它就一定是一个好的假设函数,比如在下面这个例子中,是典型的过拟合现象。


如何判断一个假设函数是过拟合的呢?对于这个简单的例子,我们可以对假设函数进行画图,然后观察图形趋势,但对于特征变量不止一个的情况,还有像有很多特征变量的问题,想要通过画出假设函数来进行观察,就会变得很难甚至是不可能实现。
因此,我们需要另一种方法来评估我们的假设函数过拟合检验。 为了检验算法是否过拟合,我们将数据分成训练集和测试集,通常用70%的数据作为训练集,用剩下30%的数据作为测试集。很重要的一点是训练集和测试集均要含有各种类型的数据,通常我们要对数据进行“洗牌”,然后再分成训练集和测试集。

  1. 对于线性回归
    模型在训练数据中学习参数\theta,最小化训练损失函数J
    并计算测试集中的误差函数J_{test}(\theta)=\frac{1}{2m_{test}}\sum_{i=1}^{m_{test}}[h_\theta(x^i_{test}-y^i_{test})]^2
  2. 对于逻辑回归
    模型在训练数据中学习参数\theta,最小化训练损失函数J

    误分类比率,对于测试集
    error(h_\theta(x),y)=\left\{ \begin{array}{rcl} 1 & & h_\theta(x)\geqq0.5, y=0; h_\theta(x)<0.5, y=1 \\ 0 & & Otherwise \end{array} \right.
    测试集上的平均error, Test_{error} = \frac{1}{m_{test}}\sum_{i=1}^{m_{test}}error(h_\theta(x^i_{test}), y^i_{test})

模型选择与训练/交叉验证/测试集

越高次数的多项式模型越能够适应我们的训练数据集,但是适应训练数据集并不代表着能推广至一般情况,我们应该选择一个更能适应一般情况的模型。我们需要使用交叉验证集来帮助选择模型。 即:使用60%的数据作为训练集,使用 20%的数据作为交叉验证集,使用20%的数据作为测试集


以此可以得到3个set上各自的损失函数


模型选择的方法总结如下:


  1. 使用训练集训练出10个模型
  2. 用10个模型分别对交叉验证集计算得出交叉验证误差J_{cv}
  3. 选取代价函数值最小的模型(图中以J_{cv}(\theta^4)为例
  4. 用步骤3中选出的模型对测试集计算得出推广误差J_{test}(\theta^4)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章