python的多元多项式回归

时间:2018-07-11 09:17:42

标签: python python-3.x jupyter-notebook

扩展为:scikit learn coefficients polynomialfeatures

对python进行多元多项式回归的直接方法是什么?

说,我们有N个样本,每个样本具有3个特征,每个样本有40个(当然,可以是任意数量,但在我的情况下是40个)响应变量。我们想要创建一个将3个独立变量与40个响应变量相关联的函数。为此,我们在N-1个样本上训练了一个多项式模型,并估计了剩余一个样本的40个响应变量。自变量(X)和响应变量(y)训练和测试数据的维度:

X_train = [(N-1) * 3], y_train = [(N-1) * 40], X_test = [1 * 3], y_test = [1 * 40]

如我所料,这种方法应该产生:

y = intercept + a x1 + b x1^2 + c x2 + d x2^2 + e x3 + f x3^3 + g x1 x2 + h x1 x3 + i x2 x3

总共有9个系数,每个样本用于描述多项式有一个截距。如果我使用David Maust在2015年提出的方法:

import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import *

model = make_pipeline(PolynomialFeatures(degree=2),LinearRegression())
y_poly = model.fit(X_train,y_train)

coefficients = model.steps[1][1].coef_
intercepts = model.steps[1][1].intercept_

coefficients.shape

[Output: (40, 10)]

对于每个响应变量,看来我们最终得到10个系数+一个截距,这比我期望的多一个系数。因此,我不清楚这些系数的含义以及如何构成描述我们的响应变量的多项式。我真的希望StackOverflow可以帮助我!希望我已经很好地定义了我的问题。

1 个答案:

答案 0 :(得分:0)

正如您所指出的,多项式变换后有9个系数和一个偏差项。但是,当您将此N×10矩阵传递给sklearn的LinearRegression时,它将被解释为10维数据集。另外,默认情况下,sklearn使回归线具有截距,因此您有10个系数和一个截距。我认为第一个系数很可能为0(至少那是我用here的数据测试下面的答案后得到的结果。)

要获得预期的行为,我认为您有两种选择:

  1. 禁用PolynomialFeatures中的偏差项。

model = make_pipeline(PolynomialFeatures(degree=2,include_bias=False), LinearRegression())

  1. 告诉LinearRegression不适合截距,取而代之的是您的第一个系数(偏差项的系数)。在这种情况下,您的截距是model.steps[1][1].coef_[0]

model = make_pipeline(PolynomialFeatures(degree=2), LinearRegression(fit_intercept=False))

我希望这会有所帮助!出于好奇,您model.steps[1][1].coef_[0]的价值是什么?