论一个“好模型”的自我修养

在上一期文章中,炸猪排给大家用一个实例来演示了如何用Python解决一个单一变量的线性回归问题,那么,我们该如何判断这个模型是不是能对已知数据进行了最佳拟合并对新数据也奏效呢?在本期炸猪排中,我们将给大家介绍评价线性回归模型的几种方式和修正模型的几大常用方法。

交叉验证法(Cross Validation)

交叉验证法(Cross Validation)是指在某种意义下将原始数据(dataset)进行分组,大部分数据做为训练集(training set),剩下小部分数据做为验证集(validation set),通常来说,训练集与测试的样本容量大小大致在3:1。交叉验证的目的是为了验证机器学习模型的好坏,在有限大小数据集的情况下,评估模型的泛化能力(generazition),所谓泛化能力,指的是模型不仅能够对已有的数据进行解释,同时也很好地拟合地应用到新的数据上 。

在上期例子里就是把已有的一部分population和profit数据作为训练集来确定模型的参数,另一部分数据在模型完成后再代进去验证。我们可以直观地理解交叉验证作为一种在缺乏新的测试数据的权宜之计。对于交叉验证的实际工程应用中,均匀的把数据分成几个部分会是一件比较困难的事情,这也是交叉验证应用上的一个短板。

误差分布分析

对于linear regression model来说,我们在前一篇文章“手把手教你用Python解决单一变量的线性回归问题”中的cost function是均方根误差(对于统计学家来说,这种估计模型yi=b0 + xi*b1 + e_i (其中e_i称为误差项)参数的做法又称为最小二乘法OLS,Ordinary least Square Estimation),那么...问题来了,我们为什么可以使用OLS去确定Linear Regression的参数呢?我们可以使用高斯-马尔可夫定理Gauss-Markov Teorem [1]证明当线性模型的误差项的估计值为0,误差项的方差相等且不互相关联时,使用OLS估计参数的线性模型具有最小的模型方差(这里牵涉到bais-variance tradeoff的问题,我们将会在后续的文章中详细展开),大体上模型方差(variance)指的是模型对于训练数据噪声的敏感性,当模型方差(variance)比较大时,往往出现了过度拟合的现象[2]。

我们把训练集中的每个x值代入拟合好的模型f(x)=X*thetaT中得到f(xi),把f(xi)-yi的值(即误差值)的分布绘制出来,如果是均匀分布在0轴的上下两侧,则说明我们的拟合模型是比较理想的。下图是上期的实例的误差分布图,由此可见误差值在0轴上下分布相对均匀,说明我们的使用OLS估计的线性模型的模型还是比较可靠的。

error = g[0, 0] + (g[0, 1] * data.Population)-data.Profitfig, ax = plt.subplots(figsize=(12,8))ax.scatter(data.Population,error,label='Error',s=20)ax.set_title('Error')plt.show()

过拟合(over-fitting)

过拟合指的是:模型在训练数据上的误差非常小,而在测试数据上误差反而增大的现象。其原因主要有四点:1)数据量太少,2)数据的噪声太大,3)模型的复杂度过高。在发生过度拟合的现象时,训练得到的模型学习到的往往是数据的噪声和outliers而非数据真实的特征。

以下是多项式高次模型(y=a0 + a1*x + a2*x^2 + … + aM*x^M)是否过拟合的图例,图1的红线是最高次数M=3时,模型对于训练集的拟合情况,图2的红线是最高次数M=9时,模型发生过拟合的一个示例,而从图3中可以看出多项式模型的项数越多最高次数越高,模型对于训练集的误差越小,而对于测试集的误差则会增大。

图1

图2

图3

正则化(regularization)

要回答正则化的作用,首先我们必须讨论什么是过拟合,过拟合是指模型在训练数据上的误差非常小,而在测试数据上误差反而增大。其原因一般是模型过于复杂,过分得去拟合数据的噪声和outliers。

那我们该如何在线性回归的过程中防止过拟合呢?其中一个常用的方法就是正则化, 具体作用就是减少特征的数量, 通过对每个参数进行惩罚,降低模型的复杂度,从而得到“更简单”的模型.。

我们在Cost Function后面引入一个参数λ,Cost Function如下图所示:

以下是正则化之后的多项式模型的拟合情况图:图4是一个最高次数M=9的多项式模型加上正则化参数lamda之后的拟合情况,可以看出相比较图3,M=9时红线对训练集的过度拟合情况得到了有效改善,在图5中随着正则化参数lamda的增加,训练集的训练误差一直在增加,而测试集的测试误差则是先下降后上升的,这是由于lamda太大时模型是欠拟合under-fitting的。

图4

图5

贝叶斯参数估计(Bayesian Parameter Estimation)

之前挖的大坑今天怕不是要填不上了。。。贝叶斯参数估计的介绍如果不给公式很难说明白。。而且一说到贝叶斯统计就不能不提统计学上两大学派贝叶斯学派与频率学派之间的恩怨情仇。。。所以这一部分内容就留给以后啦!

正则化。。。到底。。到底是啥?

正则化的本质究竟是什么呢。。。正则化参数的选取好玄学啊。。。我们在后续的文章中会给大家介绍机器学习算法的核心知识之一:贝叶斯统计。我们可以发现其实正则化的实质在贝叶斯理论的框架下其实是参数的先验信息约束[2],而在频率学派的理论框架下指的是通过正则化约束(劣化)模型的bias,从而获得更低的variance,从而提高模型的泛化能力[3]~~具体细节的讨论就在之后见啦~~

参考文献:

[1]Bishop C. Pattern Recognition and Machine Learning (Information Science and Statistics), 1st edn. 2006. corr. 2nd printing edn. Springer, New York. 2007.

[2] Friedman, Jerome, Trevor Hastie, and Robert Tibshirani.The elements of statistical learning. Vol. 1. New York: Springer series in statistics, 2001.

[3] Friedman, Jerome, Trevor Hastie, and Robert Tibshirani.The elements of statistical learning. Vol. 1. New York: Springer series in statistics, 2001.

炸猪排

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180112G0AXH600?refer=cp_1026

扫码关注云+社区