python的多元多项式回归

python的多元多项式回归,python,python-3.x,jupyter-notebook,Python,Python 3.x,Jupyter Notebook,延长: 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

延长:

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能帮助我!希望我能很好地定义我的问题。

正如你指出的,多项式变换后有9个系数和一个偏差项。但是,当您将该N×10矩阵传递给sklearn的
线性回归
时,这将被解释为一个10维数据集。此外,默认情况下,sklearn使用截距拟合回归线,因此您有10个系数和一个截距。我认为第一个系数最有可能是0(至少这是我在用来自中国的数据测试我下面的答案后得到的)

为了达到你的预期行为,我认为你有两个选择:

  • 禁用
    多项式特征
    中的偏差项
  • model=make\u管道(多项式特征(度=2,包括偏差=False),LinearRegression())

  • 告诉
    LinearRegression
    不要拟合截距,相反,您的第一个系数(偏差项的系数)将是截距。在本例中,您的截取是
    model.steps[1][1].coef[0]
  • model=make\u管道(多项式特征(阶数=2),线性回归(拟合截距=False))


    我希望这有帮助!出于好奇,
    model.steps[1][1].coef[0]

    您好gf712,非常感谢您的输入!我考虑了你的建议,通过这种方法,每一个响应变量的回归系数确实少了一个。我认为这是解决我的问题的正确方向上的一步,但我仍然不确定如何获得多项式。换句话说,这些系数中的哪个对应于哪个特征?要回答您的问题,model.steps[1][1].coef_U0[0]会生成一个1x10的0列表。可能是因为我的第一个响应变量没有变化(所有N个样本都相同)(?)保存对
    PolynomialFeatures
    对象的引用(例如
    pf=PolynomialFeatures(…)
    ,然后您可以调用
    print(pf.poly.get\u feature\u names())