【问题标题】:Scikit learn order of coefficients for multiple linear regression and polynomial featuresScikit 学习多元线性回归和多项式特征的系数顺序
【发布时间】:2019-07-18 11:35:19
【问题描述】:

我正在拟合一个简单的多项式回归模型,我想从拟合模型中获取系数。

给定准备代码:

import pandas as pd
from itertools import product
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline

# data creation
sa = [1, 0, 1, 2, 3]
sb = [2, 1, 0, 1, 2]
raw = {'a': [], 'b': [], 'w': []}
for (ai, av), (bi, bv) in product(enumerate(sa), enumerate(sb)):
    raw['a'].append(ai)
    raw['b'].append(bi)
    raw['w'].append(av + bv)
data = pd.DataFrame(raw)

# regression
x = data[['a', 'b']].values
y = data['w']
poly = PolynomialFeatures(2)
linr = LinearRegression()
model = make_pipeline(poly, linr)
model.fit(x, y)

来自this answer,我知道使用 with 可以获得的系数

model.steps[1][1].coef_
>>> array([  0.00000000e+00,  -5.42857143e-01,  -1.71428571e+00,
             2.85714286e-01,   1.72774835e-16,   4.28571429e-01])

但这提供了一个一维数组,我不确定哪些数字对应于哪些变量。

它们的顺序是 a0、a1、a2、b0、 b1、b2 或作为 a0、b0、a1、b1、a2、b2?

【问题讨论】:

    标签: python scikit-learn regression


    【解决方案1】:

    您可以使用PolynomialFeaturesget_feature_names() 来了解订单。

    在管道中,您可以这样做:

    model.steps[0][1].get_feature_names()
    
    # Output:
    ['1', 'x0', 'x1', 'x0^2', 'x0 x1', 'x1^2']
    

    如果您有特征的名称(在您的情况下为“a”、“b”),您可以传递它以获取实际特征。

    model.steps[0][1].get_feature_names(['a', 'b'])
    
    # Output:
    ['1', 'a', 'b', 'a^2', 'a b', 'b^2']
    

    【讨论】:

      【解决方案2】:

      首先,2 次多项式的系数是 1、a、b、a^2、ab 和 b^2,它们在 scikit-learn 实现中按此顺序排列。您可以通过创建一组简单的输入来验证这一点,例如

      x = np.array([[2, 3], [2, 3], [2, 3]])
      print(x)
      [[2 3]
       [2 3]
       [2 3]]
      

      然后创建多项式特征:

      poly = PolynomialFeatures(2)
      x_poly = poly.fit_transform(x)
      print(x_poly)
      [[1. 2. 3. 4. 6. 9.]
       [1. 2. 3. 4. 6. 9.]
       [1. 2. 3. 4. 6. 9.]]
      

      可以看到第一个和第二个特征是a和b(不计偏置系数1),第三个特征是a^2(即2^2),第四个是ab=2*3,而最后是 b^2=3^2。即您的模型是:

      【讨论】:

        猜你喜欢
        • 2016-03-26
        • 2020-07-04
        • 2013-03-09
        • 2020-03-09
        • 2020-09-12
        • 2016-10-23
        • 2016-01-24
        • 2020-03-27
        • 2019-07-13
        相关资源
        最近更新 更多