線性回歸是一種用於連續型分佈預測的機器學習演算法。其基本思想是通過擬合一個線性函數來最小化樣本數據和預測函數之間的誤差。 1. 概述 常見的線性回歸模型就是:\(f(x) = w_0+w_1x_1+w_2x_2+...+w_nx_n\)這樣的一個函數。其中 \((w_1,w_2,...w_n)\)是模 ...
線性回歸是一種用於連續型分佈預測的機器學習演算法。
其基本思想是通過擬合一個線性函數來最小化樣本數據和預測函數之間的誤差。
1. 概述
常見的線性回歸模型就是:\(f(x) = w_0+w_1x_1+w_2x_2+...+w_nx_n\)這樣的一個函數。
其中
- \((w_1,w_2,...w_n)\)是模型的繫數向量
- \(w_0\)是截距
- \((x_1, x_2,...,x_n)\)是樣本數據(
n
是樣本數據的維度)
簡單來說,線性回歸模型的訓練就是通過樣本數據來確定繫數向量\((w_1,w_2,...w_n)\)和截距\(w_0\)的具體數值。
然後可以使用模型\(f(x)\)來預測新的樣本數據。
2. 創建樣本數據
首先,用scikit-learn
中的自帶的函數,就可以創建出適用於線性回歸場景的樣本數據。
from sklearn.datasets import make_regression
import matplotlib.pyplot as plt
fig, ax = plt.subplots(1, 1)
X, y = make_regression(n_samples=100, n_features=1, noise=10)
ax.scatter(X[:, 0], y, marker="o")
ax.set_title("樣本數據")
plt.show()
通過 make_regression
函數可以幫助我們創建任意的回歸樣本數據。
具體使用可以參考之前的文章:TODO
3. 模型訓練
訓練線性回歸模型,一般使用最小二乘法,而scikit-learn
的linear_model
模塊中,
已經封裝好了最小二乘法的訓練演算法。
首先,根據上面的樣本數據,劃分訓練集和測試集。
from sklearn.model_selection import train_test_split
# 分割訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1)
上面的代碼按照9:1
的比例劃分了訓練集和測試集。
然後,用基於最小二乘法的線性模型來訓練數據。
from sklearn.linear_model import LinearRegression
# 初始化最小二乘法線性模型
reg = LinearRegression()
# 訓練模型
reg.fit(X_train, y_train)
print("模型的繫數向量:", reg.coef_)
print("模型的繫數截距:", reg.intercept_)
# 運行結果:
模型的繫數向量: [99.59241352]
模型的繫數截距: 0.6889080586801999
reg.coef_
就相當於前面的\((w_1,w_2,...w_n)\)reg.intercept_
就相當於前面的 \(w_0\)
這裡的樣本數據為了方便繪圖,只有一個維度。
最後,我們把線性模型,訓練集和測試集都繪製出來看看效果。
fig, ax = plt.subplots(1, 1)
# 訓練集
ax.scatter(X_train[:, 0], y_train, marker="o", c="g")
# 測試集
ax.scatter(X_test[:, 0], y_test, marker="*", c="r")
# 線性模型
reg_x = np.array([-3, 3])
reg_y = reg.coef_ * reg_x + reg.intercept_
ax.plot(reg_x, reg_y, color="b")
plt.show()
上圖中,藍色的直線是在訓練集上訓練出來的線性模型;
綠色的圓點是訓練集;紅色的五角星是測試集。
從圖中可以看出,訓練的效果還不錯。
4. 總結
線性回歸是一種常見的預測模型,可以用在
- 預測連續值:比如根據房屋面積和價格的關係預測房價,根據油耗和車輛重量之間的關係預測油耗等等。
- 判斷因果關係:比如藥物劑量和血壓之間的關係,或者產品價格和銷售量之間的關係
它的主要優勢有簡單易理解(模型簡單直觀,易於理解和解釋),
易於實施(各種編程語言中都有現成的庫和函數可以方便地實現和應用),
還有穩定性高(對於訓練數據的小變化相對穩定,能夠提供較為準確的結果)。
不過,線性回歸模型需要基於一些假設,如誤差項的獨立性、同方差性等,如果這些假設不滿足,模型可能無法得到準確的結果;
其次,對於一些非線性關係的數據表現可能不佳;
而且,對異常值敏感,如果數據中存在異常值,線性回歸的結果可能會受到較大影響,模型訓練前最好先清洗和處理異常值。