線性模型
- 一、模型介紹
- 二、用于回歸的線性模型
- 2.1 線性回歸(普通最小二乘法)
一、模型介紹
線性模型是在實踐中廣泛使用的一類模型,該模型利用輸入特征的線性函數進行預測。
二、用于回歸的線性模型
以下代碼可以在一維wave數據集上學習參數w和b,w是斜率,b是截距。
import mglearn
mglearn.plots.plot_linear_regression_wave()
我們在圖中添加了坐標網格,便于理解直線的含義。w的值是0.39,b的值是-0.03。
用于回歸的線性模型可以表示為這樣的回歸模型:對單一特征的預測結果是一條直線,兩個特征時是一個平面,或者在更高維度(即更多特征)時是一個超平面。
對于有多個特征的數據集而言,線性模型可以非常強大。特別地,如果特征數量大于訓練數據點的數量,任何目標y都可以(在訓練集上)用線性函數完美擬合。
有許多不同的線性回歸模型。這些模型之間的區別在于如何從訓練數據中學習參數w和b,以及如何控制模型復雜度。下面介紹最常見的線性回歸模型。
2.1 線性回歸(普通最小二乘法)
線性回歸,或者普通最小二乘法(ordinary least squares, OLS),是回歸問題最簡單也最經典的線性方法。線性回歸尋找參數w和b,使得對訓練集的預測值與真實的回歸目標值y之間的均方誤差最小。均方誤差是預測值與真實值之差的平方和除以樣本數。線性回歸沒有參數,這是一個優點,但也因此無法控制模型的復雜度。
以下代碼可以生成一個簡單的線性回歸模型:
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
X, y = mglearn.datasets.make_wave(n_samples=60)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)model = LinearRegression()
model.fit(X_train, y_train)
“斜率”參數(w,也叫做權重或系數)被保存在coef_屬性中,英文單詞coef就是屬性的意思,而截距(b)或偏移被保存在intercept_屬性中,英文單詞intercept的意思是攔截、阻截的意思。
intercept_屬性是一個浮點數,而coef_屬性是一個NumPy數組,每個元素對應一個輸入特征。由于wave數據集中只有一個輸入特征,所以model.coef_中只有一個元素。
再來看一下訓練集和測試集的性能:
R2約為0.66,這個結果不是很好,但我們可以看到,訓練集和測試集上的分數非常接近。這說明可能存在欠擬合,而不是過擬合。對于這個一維數據集來說,過擬合的風險很小,因為模型非常簡單(或受限)。然而,對于更高維的數據集(即有大量特征的數據集),線性模型將變得更加強大,過擬合的可能性也會變大。我們來看一下LinearRegression在更復雜的數據集上的表現,比如波士頓房價數據集,這個數據集有506個樣本和105個導出特征,代碼如下:
X, y = mglearn.datasets.load_extended_boston()
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
model = LinearRegression().fit(X_train, y_train)
線性回歸模型在訓練集上的預測非常準確,但測試集上的R2明顯低一些。訓練集和測試集之間的性能差異是過擬合的明顯標志,因此我們應該試圖找到一個可以控制復雜度的模型。標準線性回歸最常用的替代方法之一就是嶺回歸,下篇博客中將詳細介紹嶺回歸。