基於sciket learn實現多項式回歸

2021-08-30 15:24:57 字數 2957 閱讀 5014

多項式回歸在思想上和線性回歸是一致的,都使用一條線去擬合樣本值,進入用得出的模型去進行**,在樣本特徵呈現出線性特性時,我們可以用線性回歸去做**,但是在樣本特徵很複雜的時候,線性回歸往往會呈現出欠擬合的狀態,這時就需要多項式回歸。

先來看乙個小例子,給定一條二次曲線y=2x^2 + 2x,生成帶雜訊的100個樣本點,繪製出影象 ,是我們熟悉的二次方程。

然後我們用線性回歸來擬合這條曲線,看看會出現什麼情況

很明顯我們的**函式沒有很好的擬合這些樣本點,當遇到這種情況時,我們不妨在增加乙個特徵

x2 = np.hstack([x, x**2])
然後同樣呼叫sciket-learn為我們封裝好線性回歸構造器,接著繪製出影象

這時,便可以看到,擬合程度已經比較好了。

sciket-learn中為我們提供了polynomialfeatures來確定特徵的維度。

from sklearn.preprocessing import polynomialfeatures

poly = polynomialfeatures(degree=2)

poly.fit(x)

x3 = poly.transform(x)

lin_reg3 = linearregression()

lin_reg3.fit(x3, y)

y_predict3 = lin_reg3.predict(x3)

plt.scatter(x, y)

plt.plot(np.sort(x), y_predict3[np.argsort(x)], color='r')

plt.show()

可以看出得到的影象和上面的影象是一致的,這裡有興趣的朋友可以改變degree引數的值,看看會發生什麼樣的變化。

完整**

import numpy as np

import matplotlib.pyplot as plt

x = np.random.uniform(-3, 3, size = 100)

x = x.reshape(-1, 1)

y = 2 * x**2 + x + 2 + np.random.normal(0, 1, size = 100)

plt.scatter(x, y)

plt.show()

from sklearn.linear_model import linearregression

lin_reg = linearregression()

lin_reg.fit(x, y)

y_predict = lin_reg.predict(x)

plt.scatter(x, y)

plt.plot(x, y_predict, color='r')

plt.show()

# 解決方案 新增乙個特徵

(x**2).shape

x2 = np.hstack([x, x**2])

x2.shape

plt.scatter(x, y)

plt.plot(np.sort(x), y_predict2[np.argsort(x)], color='r')

plt.show()

lin_reg2.coef_

lin_reg2.intercept_

from sklearn.preprocessing import polynomialfeatures

poly = polynomialfeatures(degree=2)

poly.fit(x)

x3 = poly.transform(x)

lin_reg3 = linearregression()

lin_reg3.fit(x3, y)

y_predict3 = lin_reg3.predict(x3)

plt.scatter(x, y)

plt.plot(np.sort(x), y_predict3[np.argsort(x)], color='r')

plt.show()

基於註解實現

用於記錄日誌的工具類,它裡面提供了公共的 component logger aspect 表示當前類是乙個切面類 public class logger 前置通知 before pt1 public void beforeprintlog 後置通知 afterreturning pt1 public...

基於Jquery Ajax Json實現分頁顯示

1.後台action產生json資料。list blacklist blackservice.getblackinfolist mobilenum,gatewayid,startdate,enddate int totalrows blacklist.size stringbuffer sb new...

AOP基於註解實現

切面類 component 控制反轉 aspect 宣告切面類 public class forumadvisor after execution com.mitu.aspect.宣告後置增強 public void after around execution com.mitu.aspect.宣告...