相關內容鏈接:html
機器學習:Python中如何使用最小二乘法(如下簡稱文一)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)結果圖spa
(當前代碼圖) (文一圖片)code
3)分析說明htm
從結果看,兩種方式的擬合結果類似。可是這裏只有一個可知參數:0.90045842,並且擬合的線性方程具體形式未知。文一的方式能夠本身設置線性方程形式,而且全部參數均可以求的結果。blog
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包中關於最小二乘法或者多項式迴歸的使用方式比較方便靈活