相關內容連接:
機器學習:Python中如何使用最小二乘法(以下簡稱文一)
機器學習:形如拋物線的散點圖在python和R中的非線性回歸擬合方法(以下簡稱文二)
有些內容已經在上面兩篇博文中提到了,所以就不重復了。這里主要講的是sklearn包與scipy包中相關函數的區別。並且多項式回歸和普通最小二乘法聯系比較緊密,所以也放到此處講了。
1.普通最小二乘法
1)文一中的數據采用sklearn包的函數擬合
from sklearn import linear_model import numpy as np import matplotlib.pyplot as plt ##樣本數據(Xi,Yi),需要轉換成數組(列表)形式 Xi=np.array([6.19,2.51,7.29,7.01,5.7,2.66,3.98,2.5,9.1,4.2]).reshape(-1,1) Yi=np.array([5.25,2.83,6.41,6.71,5.1,4.23,5.05,1.98,10.5,6.3]).reshape(-1,1) ##設置模型 model = linear_model.LinearRegression() ##訓練數據 model.fit(Xi, Yi) ##用訓練得出的模型預測數據 y_plot = model.predict(Xi) ##打印線性方程的權重 print(model.coef_) ## 0.90045842 ##繪圖 plt.scatter(Xi, Yi, color='red',label="樣本數據",linewidth=2) plt.plot(Xi, y_plot, color='green',label="擬合直線",linewidth=2) plt.legend(loc='lower right') plt.show()
2)結果圖
(當前代碼圖) (文一圖片)
3)分析說明
從結果看,兩種方式的擬合結果相似。但是這里只有一個可知參數:0.90045842,而且擬合的線性方程具體形式未知。文一的方式可以自己設置線性方程形式,並且所有參數都可以求的結果。
2.多項式回歸
多項式回歸其實是對普通最小二乘法的一個擴展,即當標准的直線方程(一元一次方程)無法滿足擬合要求的時候,可以擴展到多元多次方程,例如文二中的例子就簡單的擴展了一下:一元二次方程。
下面要說的sklearn包中多項式回歸的使用方式其實和文二中的方式一樣:指定一個基函數,但是我查看了官網的大部分例子,發現只能使用sklearn包中的線性回歸函數,無法像文二一樣自定義基函數
下面是使用例子:
from sklearn.preprocessing import PolynomialFeatures from sklearn.pipeline import make_pipeline import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import Ridge ##樣本數據(Xi,Yi),需要轉換成數組(列表)形式 Xi=np.array([1,2,3,4,5,6]).reshape(-1,1) #Yi=np.array([9,18,31,48,69,94]) Yi=np.array([9.1,18.3,32,47,69.5,94.8]).reshape(-1,1) ##這里指定使用嶺回歸作為基函數 model = make_pipeline(PolynomialFeatures(2), Ridge()) model.fit(Xi, Yi) ##根據模型預測結果 y_plot = model.predict(Xi) ##繪圖 plt.scatter(Xi, Yi, color='red',label="樣本數據",linewidth=2) plt.plot(Xi, y_plot, color='green',label="擬合直線",linewidth=2) plt.legend(loc='lower right') plt.show()
(本例結果圖) (文二圖)
在本例中完全得不到關於參數的任何信息。
3.總結
1.多項式回歸是線性模型的一個擴展
2.scipy包中關於最小二乘法或者多項式回歸的使用方式比較方便靈活