【scikit-learn基础】--『监督学习』之 岭回归
嶺回歸(Ridge Regression)是一種用于處理共線性數據的線性回歸改進方法。
和上一篇用基于最小二乘法的線性回歸相比,它通過放棄最小二乘的無偏性,
以損失部分信息、降低精度為代價來獲得更實際和可靠性更強的回歸系數。
1. 概述
嶺回歸的模型對于存在大量相關特征(這些特征之間存在很高的相關性)的數據時效果遠好于基于最小二乘法的線性模型。
原因就是它通過給系數的大小增加一個約束條件(即L2正則化項),來防止模型過度擬合訓練數據。
損失函數一般定義為:\(L(w) = (y-wX)^2+\lambda\parallel w\parallel_2\)
其中 \(\lambda\parallel w\parallel_2 = \lambda\sum_{i=1}^{n}w_i^2\),也就是 L2正則化項。
模型訓練的過程就是尋找讓損失函數\(L(w)\)最小的參數\(w\)。
也就等價于:\(\begin{align}
& arg\ min(y-wX)^2 \\
& s.t. \sum w_{ij}^2 < s
\end{align}\)
這兩個公式表示,在滿足約束條件 \(\sum w_{ij}^2 < s\)的情況下,計算 \((y-wX)^2\)的最小值。
2. 創建樣本數據
嶺回歸適用于特征之間有很高關聯性的數據集。
所以用scikit-learn中的加州住房數據集,這個數據集有8個房屋售價相關的屬性,屬性之間關聯性高。
數據集的文件獲取可以參考:TODO
從上面的文章中下載數據集(是一個zip壓縮文件),
如下例所示,下載之后在 D:\share\data 中解壓,就可以加載了。
import os
from sklearn.datasets import fetch_california_housing
home_dir = "D:\share\data"
data = fetch_california_housing(data_home=os.path.join(home_dir, "cal_housing"))
X = data["data"]
y = data["target"]
大約有2萬多條數據。
3. 模型訓練
數據加載之后,首先劃分訓練集和測試集。
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)
然后用嶺回歸模型訓練數據:
from sklearn.linear_model import Ridge
# 初始化嶺回歸線性模型
reg = Ridge()
# 訓練模型
reg.fit(X_train, y_train)
這里,用的Ridge()模型的默認參數,它的一些主要參數如下(訓練模型時可根據情況調整參數):
-
alpha:控制正則化強度的常量,也就是上面公式中的 \(\lambda\),默認值
1,設置為0時,就是最小二乘法 -
fit_intercept:是否擬合此模型的截距,默認
True -
copy_X:是否復制
X(也就是訓練數據),默認True,設置為False的話,有可能會改變訓練數據 - tol:算法迭代時,收斂的精度上限
-
solver:迭代時使用的求解器,包含** {auto, svd, cholesky, lsqr, sparse_cg, sag, saga, lbfgs}** 等算法,默認
auto(根據數據類型自動選擇求解器)
最后,用測試數據來驗證訓練后模型的性能。
y_pred = reg.predict(X_test)
mse = metrics.mean_squared_error(y_test, y_pred)
r2 = metrics.r2_score(y_test, y_pred)
m_error = metrics.median_absolute_error(y_test, y_pred)
print("均方誤差:{}".format(mse))
print("復相關系數:{}".format(r2))
print("中位數絕對誤差:{}".format(m_error))
# 運行結果
均方誤差:0.0029948538129997903
復相關系數:0.9987534427417275
中位數絕對誤差:0.049467455621301726
從結果來看,模型的性能還不錯,均方誤差和中位數絕對誤差都比較小,而復相關系數高,說明在測試數據中,預測的值和實際的值比較接近。
4. 總結
總之,嶺回歸在很多場景下都有應用,例如多元線性回歸、時間序列預測、特征選擇等。
它的主要優點是可以處理共線性數據,并且在加入噪聲的情況下會有更穩定的性能。
然而,由于其對數據的縮放敏感,嶺回歸的一個主要局限性是它可能對數據的尺度非常敏感。
此外,嶺回歸正則化參數的選擇通常需要一些經驗或者實驗來確定,這也增加了其應用的復雜性。
PS.
共線性是指特征之間存在高度相關性,這可能導致線性回歸模型的不穩定。
總結
以上是生活随笔為你收集整理的【scikit-learn基础】--『监督学习』之 岭回归的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 左连接和右连接的区别
- 下一篇: Charles的奇巧淫技