在Python中使用線性回歸算法
Scikit-Learn 涵蓋了主流的機器學習算法,我們先介紹常用的幾個庫:
- lienar_model:線性模型算法庫,包括Logistic回歸算法等;
- neighbors:最鄰近算法庫;
- naive-bayes:朴素貝葉斯算法庫;
- tree:決策樹算法;
- svm:支持向量機算法;
- neural_network:神經網絡算法。
如下,簡單解釋線性回歸算法。其數學表達式如下:
\[\boldsymbol{\hat y} = \boldsymbol{W} \boldsymbol{x} \]
# 導入所需庫
import numpy as np
from matplotlib import pyplot as plt
# 模擬數據集
x= np.linspace(-10, 10, 20)
segma= np.random.randn(20)
y= 3* x+ segma
# 數據圖
plt.scatter(x, y)
plt.show()

同時,此處對線性回歸算法進行簡單的解釋。
# 從Scikit-Learn庫導入線性回歸算法
from sklearn import linear_model
# x訓練線性回歸模型
model= linear_model.LinearRegression()
model.fit(X, y)
# 進行預測
model.predit(x_)
如果此時直接將我們上面的得到的x,y傳入模型,代碼會提示數據維度錯誤,這是因為Scikit-Learn中線性回歸算法中的fit()方法需要傳入x和y兩組矩陣,即:
\[x: [[樣本1],...,[樣本n]] \]
\[y: [[樣本1],...,[樣本n]] \]
下面,我們可以利用的Python的List將序列變成矩陣。
X= [[i] for i in x]
y= [[i] for i in y]
from sklearn import linear_model
model= linear_model.LinearRegression()
model.fit(X, y)
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)
這樣,我們就得到了算法所需的正確數據格式。但是,為了檢驗訓練的結果,我們還需要一組測試用的x_。
x_= [[1], [2]]
y_= model.predict(x_)
y_
array([[2.8780171 ],
[5.90230701]])
我們可以通過display函數通過model.intercept_和model.coef_查看截距和\(\boldsymbol{W}\).
display(model.intercept_) #截距
display(model.coef_) #線性模型的系數
array([-0.1462728])
array([[3.02428991]])
我們還可以可視化模型的擬合效果。
y__= model.predict(X)
plt.scatter(x, y__)
plt.plot(X, y__, 'g-')
plt.show()

以上便是一次完整的簡單的線性回歸過程。
下面,我們討論線性回歸算法的優缺點:
| 優缺點 | 描述 |
|---|---|
| 優點 | 簡單,容易理解和實現,可解釋性強 |
| 缺點 | 表達復雜模型時不理想,且對非線性問題表現不好 |
| 應用場景 | 金融、氣象等 |
