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