2 回答

TA貢獻(xiàn)1804條經(jīng)驗 獲得超8個贊
您的繪圖實際上對應(yīng)于您運行的代碼
poly=PolynomialFeatures(degree=7)
而不是degree=2
。事實上,通過上述更改運行代碼,我們得到:
現(xiàn)在,您的多項式特征是:
poly.get_feature_names()
# ['1', 'x0', 'x0^2', 'x0^3', 'x0^4', 'x0^5', 'x0^6', 'x0^7']
線性回歸的相應(yīng)系數(shù)是:
reg.coef_
# array([[ 0. , 5.43894411, -68.14277256, 364.28508827,
# -941.70924401, 1254.89358662, -831.27091422, 216.43304954]])
加上截距:
reg.intercept_
# array([0.51228593])
鑒于上述情況,并設(shè)置
coef = reg.coef_[0]
由于這里我們的初始數(shù)據(jù)只有一個特征,因此您的回歸方程為:
y = reg.intercept_ + coef[0] + coef[1]*x + coef[2]*x**2 + coef[3]*x**3 + coef[4]*x**4 + coef[5]*x**5 + coef[6]*x**6 + coef[7]*x**7
為了進(jìn)行視覺驗證,我們可以用以下x數(shù)據(jù)繪制上述函數(shù)[0, 1]
x = np.linspace(0, 1, 15)
運行上面的表達(dá)式y(tǒng)并
plt.plot(x, y)
給出:
使用一些隨機生成的數(shù)據(jù)x,我們可以驗證方程的結(jié)果y_eq確實等于y_reg數(shù)值精度范圍內(nèi)回歸模型產(chǎn)生的結(jié)果:
x = np.random.rand(1,10)
y_eq = reg.intercept_ + coef[0] + coef[1]*x + coef[2]*x**2 + coef[3]*x**3 + coef[4]*x**4 + coef[5]*x**5 + coef[6]*x**6 + coef[7]*x**7
y_reg = np.concatenate(reg.predict(poly.transform(x.reshape(-1,1))))
y_eq
# array([[0.72452703, 0.64106819, 0.67394222, 0.71756648, 0.71102853,
# 0.63582055, 0.54243177, 0.71104983, 0.71287962, 0.6311952 ]])
y_reg
# array([0.72452703, 0.64106819, 0.67394222, 0.71756648, 0.71102853,
# 0.63582055, 0.54243177, 0.71104983, 0.71287962, 0.6311952 ])
np.allclose(y_reg, y_eq)
# True
與問題無關(guān),我想您已經(jīng)知道嘗試將如此高階的多項式擬合到如此少的數(shù)據(jù)點并不是一個好主意,并且您可能應(yīng)該保持 2 或 3 的低階數(shù)......

TA貢獻(xiàn)1111條經(jīng)驗 獲得超0個贊
請注意您如何生成問題中所示的圖。當(dāng)我運行你的代碼時,我得到了以下(度= 2)多項式,按預(yù)期擬合數(shù)據(jù):
現(xiàn)在您已經(jīng)擬合了數(shù)據(jù),您可以看到模型的系數(shù):
print(reg.coef_)
print(reg.intercept_)
# [[ 0. 0.85962436 -0.83796885]]
# [0.5523586]
請注意,用于擬合此模型的數(shù)據(jù)相當(dāng)于以下內(nèi)容:
X_poly = np.concatenate([np.ones((16,1)), X, X**2], axis=1)
因此,單個數(shù)據(jù)點是按如下方式創(chuàng)建的向量:
temp = 0.5
x = np.array([1, temp, temp**2]).reshape((1,3))
您的多項式模型只是多項式特征的線性模型:
y = 軸 + B
或者
y = reg.coef_.dot(x.T) + reg.intercept_
print(y) # [[0.77267856]]
確認(rèn):
print(reg.predict(x)) # array([[0.77267856]])
添加回答
舉報