我正在使用Python3中的scikit-learn进行线性回归。我有一个x
和y
数据数组,并希望使用三阶多项式实现线性回归(然后将拟合线应用于我的数据)。之后,我想弄清楚该多项式的实际方程是什么。但是,当我使用model.coeff_
命令时,我不知道结果的顺序。
顺便说一句,我只有一个自变量x
。假设我需要的方程式为y = a*x + b*x^2 + c*x^3 + intercept
。我尝试使用model.coeff_
命令,但不确定打印结果的顺序。
# The data
----------------------
utility = np.array([100, 96.64, 43.94, 24.48, 0, 0.05])
windiness = np.array([0, 2.5, 6.7, 12.3, 15.5, 19, 20])
windiness = windiness[:, np.newaxis]
utility = utility[:, np.newaxis]
# Regression
-----------------------
polynomial_features= PolynomialFeatures(degree=3)
x_poly = polynomial_features.fit_transform(windiness)
model = LinearRegression()
model.fit(x_poly, utility)
y_poly_pred = model.predict(x_poly)
因此,运行print(model.coef_)
输出
[[ 0. , -6.78066221, -0.19310896, 0.01361347]]
但是哪个数字是a,哪个数字是b,等等?
答案 0 :(得分:1)
首先,您的windiness变量包含一个额外的值,因此您需要删除一个值,并确保变量输入和输出都具有长度。现在,让我们继续更新的代码。为了简单起见,我删除了0。
utility = np.array([100, 96.64, 43.94, 24.48, 0, 0.05])
windiness = np.array([2.5, 6.7, 12.3, 15.5, 19, 20])
windiness = windiness[:, np.newaxis]
utility = utility[:, np.newaxis]
polynomial_features= PolynomialFeatures(degree=3)
x_poly = polynomial_features.fit_transform(windiness)
model = LinearRegression()
model.fit(x_poly, utility)
y_poly_pred = model.predict(x_poly)
现在,让我们打印新的变换特征向量
print(x_poly)
您应该获得与此类似的输出
[[1.000000e+00 2.500000e+00 6.250000e+00 1.562500e+01]
[1.000000e+00 6.700000e+00 4.489000e+01 3.007630e+02]
[1.000000e+00 1.230000e+01 1.512900e+02 1.860867e+03]
[1.000000e+00 1.550000e+01 2.402500e+02 3.723875e+03]
[1.000000e+00 1.900000e+01 3.610000e+02 6.859000e+03]
[1.000000e+00 2.000000e+01 4.000000e+02 8.000000e+03]]
在这里,我们可以看到第一个特征是X ^ 0,第二个特征是X ^ 1,第三个特征是X ^ 2,第四个特征是X ^ 3。现在,它已从多项式变为等效的线性模型。
此print(model.coef_)
可以显示您的模型系数。您得到这个[[ 0.0 11.125 -1.718 0.047]]
现在,让我们如下模拟三阶多项式
y[0] = model.intercept_ + 0.0 * X[0]^0 + 11.125 * X[0]^1 + (-1.718) * X[0]^2 + 0.047*X[0]^3
长话短说,系数如下
a = 11.125
b = -1.718
c = 0.047
。