多项式回归度增加后,训练得分减少

时间:2017-12-08 15:53:36

标签: python machine-learning scikit-learn linear-regression polynomial-approximations

我正在尝试使用线性回归将多项式拟合到来自正弦信号的一组点,并添加一些噪声,使用来自linear_model.LinearRegression的{​​{1}}。

正如预期的那样,训练和验证分数随着多项式的增加程度而增加,但是在一定程度上大约20个事情开始变得怪异并且分数开始下降,并且模型返回看起来不像的多项式我用来训练它的数据。

下面是一些可以看到这一点的图表,以及生成回归模型和图表的代码:

在度数= 17之前,该如何运作良好。原始数据VS预测:

之后它变得更糟:

验证曲线,增加多项式的程度:

sklearn

我知道预期的事情是,当模型的复杂性增加时,验证分数会下降,但为什么训练分数也会下降?我可以在这里找到什么?

2 个答案:

答案 0 :(得分:0)

由于训练数据模型过度拟合,预计训练分数也会下降。由于正弦函数的泰勒级数展开,验证错误会下降。因此,随着您增加多项式的次数,您的模型会更好地适应正弦曲线。

在理想情况下,如果你没有扩展到无限度的函数,你会看到训练错误下降(不是单调但一般),验证错误在某种程度上升(较高程度的高 - >低对于某些更高的学位 - >在此之后增加。)

答案 1 :(得分:0)

首先,这是通过为模型设置归一化标记True来解决此问题的方法;

def PolynomialRegression(degree=4):
    return make_pipeline(PolynomialFeatures(degree),
                         LinearRegression(normalize=True))

但是为什么呢?在线性回归中,fit()函数使用Moore–Penrose inverse找到最合适的模型,这是计算least-square解的一种常用方法。当您添加值的多项式时,如果不进行归一化,您的增强特征将很快变得非常大。这些较大的值支配着最小二乘法计算的成本,并导致模型适合较大的值,即高阶多项式值而不是数据。

图看起来更好,应该看起来也一样。 enter image description here

enter image description here