我在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()
让我们首先使用二次多项式,而不是在您的示例中使用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