我正在尝试使用线性回归将多项式拟合到来自正弦信号的一组点,并添加一些噪声,使用来自linear_model.LinearRegression
的{{1}}。
正如预期的那样,训练和验证分数随着多项式的增加程度而增加,但是在一定程度上大约20个事情开始变得怪异并且分数开始下降,并且模型返回看起来不像的多项式我用来训练它的数据。
下面是一些可以看到这一点的图表,以及生成回归模型和图表的代码:
在度数= 17之前,该如何运作良好。原始数据VS预测:
之后它变得更糟:
验证曲线,增加多项式的程度:
sklearn
我知道预期的事情是,当模型的复杂性增加时,验证分数会下降,但为什么训练分数也会下降?我可以在这里找到什么?
答案 0 :(得分:0)
由于训练数据模型过度拟合,预计训练分数也会下降。由于正弦函数的泰勒级数展开,验证错误会下降。因此,随着您增加多项式的次数,您的模型会更好地适应正弦曲线。
在理想情况下,如果你没有扩展到无限度的函数,你会看到训练错误下降(不是单调但一般),验证错误在某种程度上升(较高程度的高 - >低对于某些更高的学位 - >在此之后增加。)
答案 1 :(得分:0)
首先,这是通过为模型设置归一化标记True
来解决此问题的方法;
def PolynomialRegression(degree=4):
return make_pipeline(PolynomialFeatures(degree),
LinearRegression(normalize=True))
但是为什么呢?在线性回归中,fit()
函数使用Moore–Penrose inverse
找到最合适的模型,这是计算least-square
解的一种常用方法。当您添加值的多项式时,如果不进行归一化,您的增强特征将很快变得非常大。这些较大的值支配着最小二乘法计算的成本,并导致模型适合较大的值,即高阶多项式值而不是数据。