【问题标题】:Multivariate polynomial regression for pythonpython的多元多项式回归
【发布时间】:2018-12-19 06:29:56
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    正如您所指出的,多项式变换后有 9 个系数和一个偏置项。但是,当您将此 N x 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] 的价值是多少?

    【讨论】:

    • 您好 gf712,非常感谢您的意见!我考虑了您的建议,通过这种方法,它确实为每个响应变量产生了一个较少的回归系数。我认为这是朝着解决我的问题的正确方向迈出的一步,但我仍然不确定我如何实际获得多项式。换句话说,这些系数中的哪个对应于哪个特征?要回答您的问题,model.steps[1][1].coef_[0] 会产生一个 1x10 的 0 列表。可能是因为我的第一个响应变量没有可变性(所有 N 个样本都相同)(?)
    • 保存对PolynomialFeatures对象的引用(例如pf = PolynomialFeatures(...),然后你可以调用print(pf.poly.get_feature_names())
    猜你喜欢
    • 2021-07-07
    • 1970-01-01
    • 1970-01-01
    • 2019-07-20
    • 2017-12-11
    • 2020-01-31
    • 2018-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多