机器学习实战(基于scikit-learn和TensorFlow)学习心得(18)--Polynomial Regression 多项式回归和学习曲线

假设我们的系统散点是这样的
机器学习实战(基于scikit-learn和TensorFlow)学习心得(18)--Polynomial Regression 多项式回归和学习曲线
从图中可以看出,这个分布形似二次函数,只单纯的使用线性回归去拟合数据是肯定不合适的.所以说我们要把单纯的一次线性回归扩展成多次多项式回归.
如何使线性回归扩展成多项式回归呢?一种简单的方法是将每个feature都扩展为多次项,然后在此扩展上训练线性模型。
原线性回归方程是:y=a(x1)+b(x2)+1
二次多项式方程是:y=c(x1)^2 +d(x2)^2+a(x1)+b(x2)+1
三次多项式方程:继续在二次多项式回归方程里面加入(x1)^3 , (x2)^3, (x2)(x1)^2, (x1)(x2)^2
所以说,多项式回归不仅能拟合不规则的数据集,还能使两种features联系起来.

Learning Curves
如果我们的多项式模型过于复杂就会产生下面这种情况:
机器学习实战(基于scikit-learn和TensorFlow)学习心得(18)--Polynomial Regression 多项式回归和学习曲线
可以看到,当我们使用300-degree的多项式回归的时候出现了明显的过拟合情况.这是我们不想出现的结果.但是当我们用1-degree,也就是线性回归方程的时候又是明显的欠拟合.那么怎么才能找到合适的维度数呢?
很简单,我们用cross-validation去训练模型,然后根据训练集和验证集的误差大小来确定我们是不是过拟合或者欠拟合了.
机器学习实战(基于scikit-learn和TensorFlow)学习心得(18)--Polynomial Regression 多项式回归和学习曲线
首先,让我们看一下训练数据的性能:当训练集中只有一个或两个实例时,模型可以很好地拟合它们,这就是曲线从零开始的原因。但是,随着将新实例添加到训练集中,模型就不可能完美地拟合训练数据,这既因为数据既有噪声,又不是线性的。因此,训练数据上的错误会一直上升,直到达到稳定水平为止,此时,将新实例添加到训练集中并不会使平均错误变得更好或更糟。
现在,让我们看看验证数据上模型的性能。当training set的数据太小时,训练出来的模型根本没用,它无法正确地进行概括,这时用这种没用的模型去验证validation set数据肯定不好.这就是为什么验证误差最初很大的原因。然后,随着模型显示更多的训练示例,它开始学习,因此验证错误逐渐降低。但是,直线再次不能很好地对数据进行建模,因此误差最终会达到一个平稳的高度,非常接近其他曲线。
这其实就是欠拟合的表现,
机器学习实战(基于scikit-learn和TensorFlow)学习心得(18)--Polynomial Regression 多项式回归和学习曲线
可以看到,当我们用training set训练的时候,效果很好但当我们用模型去验证的时候,效果很差.蓝线和红线之间的空隙很大,这种就是典型的过拟合情况了.
通过cross-validation的方法我们就可以找出来比较合适的degree for polynomial regression.