首页 > 解决方案 > python的多元多项式回归

问题描述

扩展:scikit学习系数多项式特征

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

标签: pythonpython-3.xjupyter-notebook

解决方案


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

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

  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]


推荐阅读