【问题标题】:scikit learn coefficients polynomialfeaturesscikit学习系数多项式特征
【发布时间】:2016-03-26 05:23:18
【问题描述】:

我在 PolynomialFeatures 的帮助下拟合了一个模型,但我不知道如何获取模型的系数。代码如下:

import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline
import matplotlib.pyplot as plt

X = np.matrix([0,1,2,3,4,5,6,7,8,9,10]).reshape((11,1))
Y = np.matrix([0,2.2,3.5,14.3,20.4,32.1,40.3,  
           59.1,86.2,90.3,99.9]).reshape((11,1))
a = PolynomialFeatures(15)
modelo = make_pipeline(a, LinearRegression())
modelo.fit(X, Y)
plt.plot(X,Y,'.')
plt.plot(X, modelo.predict(X),'-')
plt.show()

【问题讨论】:

    标签: python scikit-learn


    【解决方案1】:

    让我们从使用二次多项式开始,而不是示例中的 15 次多项式,以简化您的问题(以及避免过度拟合)。

    使用您的 X 让我们看看值是如何转换的。

    a = PolynomialFeatures(2)
    a.fit_transform(X)
    
    array([[   1.,    0.,    0.],
           [   1.,    1.,    1.],
           [   1.,    2.,    4.],
           [   1.,    3.,    9.],
           [   1.,    4.,   16.],
           [   1.,    5.,   25.],
           [   1.,    6.,   36.],
           [   1.,    7.,   49.],
           [   1.,    8.,   64.],
           [   1.,    9.,   81.],
           [   1.,   10.,  100.]])
    

    我们可以看到第一个特征是X^0,第二个是X^1,第三个是X^2

    现在,使用您现有的代码,您正在构建一个包含两个步骤的管道,如 modelo

    我们可以使用modelo.steps[1][1] 访问第二步的估算器。从那里我们可以使用coef_获取系数,使用intercept_获取截距。

    modelo.steps[1][1].coef_
    # [[ 0.          3.3486014   0.76468531]]
    
    modelo.steps[1][1].intercept_
    # [-2.75244755]
    

    从这里我们可以看到多项式是 y_estimated = -2.75 + 0 * X^0 + 3.35 * X^1 + 0.76 * X^2

    【讨论】:

    • 在我看来,model.coef_[0] 将始终为 0.0,实际截距为 clf.intercept_,您是否发现在您的经验中是这种情况?你知道有什么文件可以证实这一点吗?
    • 是的。这是我对LinearRegression 模型的经验。它可能因使用的 sklearn 估算器而异。
    • 您可以在特征中包含偏差:make_pipeline(PolynomialFeatures(degree, include_bias=True),LinearRegression(fit_intercept=False)) 或在线性回归中:make_pipeline(PolynomialFeatures(degree, include_bias=False),LinearRegression(fit_intercept=True))。默认情况下,两者都是True,而第一个coef_ 则始终为零。
    猜你喜欢
    • 2019-07-18
    • 2018-02-06
    • 2019-07-13
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 2016-07-29
    • 1970-01-01
    相关资源
    最近更新 更多