2. Ridge 回歸的目標(biāo)函數(shù)

Ridge 回歸通過在上述目標(biāo)函數(shù)中加入一個正則化項來限制回歸系數(shù)的大小:

其中, 是正則化參數(shù),控制懲罰項的權(quán)重。較大的  會更嚴(yán)格地限制  的大小,防止過擬合。

3. 目標(biāo)函數(shù)的推導(dǎo)

將目標(biāo)函數(shù)展開:

其中, 是的目標(biāo)值向量,是的輸入特征矩陣,是 的回歸系數(shù)向量。

展開并簡化:

4. 梯度計算

為了找到使目標(biāo)函數(shù)最小化的?,我們對??求導(dǎo)并設(shè)置導(dǎo)數(shù)為零:

簡化上式:

5. 解方程

整理上述方程:

其中,  是  的單位矩陣。

我們可以通過矩陣求逆來解這個方程:

6. 算法流程

  1. 準(zhǔn)備數(shù)據(jù):獲取特征矩陣??和目標(biāo)值向量?。
  2. 選擇正則化參數(shù):選擇合適的  值。
  3. 構(gòu)建矩陣:計算  和 。
  4. 添加正則化項:計算 。
  5. 求解回歸系數(shù):通過矩陣求逆計算 。
  6. 模型預(yù)測:使用回歸系數(shù)  進行預(yù)測。

例子

假設(shè)我們有以下數(shù)據(jù):

計算中間結(jié)果:

求解回歸系數(shù):

這個例子展示了 Ridge 回歸的實際計算過程。通過引入正則化項,Ridge 回歸能夠處理多重共線性問題,并提高模型的泛化能力。

完整案例

數(shù)據(jù)集我們使用加利福尼亞房價數(shù)據(jù)集。使用 Ridge 回歸模型構(gòu)建、訓(xùn)練、預(yù)測、評估和優(yōu)化。

這里再簡單和大家介紹下加利福尼亞房價數(shù)據(jù)集,在學(xué)習(xí)階段,使用頻率非常的高~

加利福尼亞房價數(shù)據(jù)集(California Housing Dataset)包含了加利福尼亞州各個地區(qū)的房價以及相關(guān)的地理和人口統(tǒng)計特征。這個數(shù)據(jù)集是由加利福尼亞州1990年的人口普查數(shù)據(jù)構(gòu)建的。

特征描述

  1. **MedInc**:街區(qū)的中位收入
  2. **HouseAge**:街區(qū)中房屋的中位年齡
  3. **AveRooms**:每戶平均房間數(shù)
  4. **AveBedrms**:每戶平均臥室數(shù)
  5. **Population**:街區(qū)的人口總數(shù)
  6. **AveOccup**:每戶平均居住人數(shù)
  7. **Latitude**:街區(qū)的緯度
  8. **Longitude**:街區(qū)的經(jīng)度

目標(biāo)變量

大家可以使用?fetch_california_housing?函數(shù)從?sklearn.datasets?模塊中加載該數(shù)據(jù)集

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import Ridge, Lasso, ElasticNet
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.model_selection import GridSearchCV

# 加利福尼亞房價數(shù)據(jù)集
california = fetch_california_housing()
X = pd.DataFrame(california.data, columns=california.feature_names)
y = california.target

# 數(shù)據(jù)標(biāo)準(zhǔn)化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 為訓(xùn)練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)

# 正則化參數(shù)的候選值
alphas = np.logspace(-4, 4, 50)

# 通過網(wǎng)格搜索和交叉驗證來選擇最佳正則化參數(shù)
ridge = Ridge()
grid_search = GridSearchCV(estimator=ridge, param_grid={'alpha': alphas}, cv=5, scoring='neg_mean_squared_error')
grid_search.fit(X_train, y_train)

# 獲取最佳模型
best_ridge = grid_search.best_estimator_
print(f"最佳正則化參數(shù): {grid_search.best_params_['alpha']}")

# 預(yù)測訓(xùn)練集和測試集
y_train_pred = best_ridge.predict(X_train)
y_test_pred = best_ridge.predict(X_test)

# 計算均方誤差和R^2分?jǐn)?shù)
train_mse = mean_squared_error(y_train, y_train_pred)
test_mse = mean_squared_error(y_test, y_test_pred)
train_r2 = r2_score(y_train, y_train_pred)
test_r2 = r2_score(y_test, y_test_pred)

print(f"訓(xùn)練集均方誤差: {train_mse}")
print(f"測試集均方誤差: {test_mse}")
print(f"訓(xùn)練集 R^2 分?jǐn)?shù): {train_r2}")
print(f"測試集 R^2 分?jǐn)?shù): {test_r2}")

# 繪制實際值與預(yù)測值對比圖
plt.figure(figsize=(10, 6))
plt.scatter(y_train, y_train_pred, label='train dataset', alpha=0.7)
plt.scatter(y_test, y_test_pred, label='test dataset', alpha=0.7)
plt.plot([min(y), max(y)], [min(y), max(y)], 'r--', lw=2)
plt.xlabel('actual')
plt.ylabel('predict')
plt.title('actual vs. predict')
plt.legend()
plt.show()

# 分析特征的重要性
coefs = pd.Series(best_ridge.coef_, index=california.feature_names)
coefs.sort_values().plot(kind='barh', figsize=(10, 6))
plt.title('Ridge 回歸的特征重要性')
plt.show()

# 比較其他回歸模型

# Lasso 回歸
grid_search_lasso = GridSearchCV(estimator=Lasso(), param_grid={'alpha': alphas}, cv=5, scoring='neg_mean_squared_error')
grid_search_lasso.fit(X_train, y_train)
best_lasso = grid_search_lasso.best_estimator_

# ElasticNet 回歸
param_grid = {'alpha': alphas, 'l1_ratio': np.linspace(0, 1, 10)}
grid_search_en = GridSearchCV(estimator=ElasticNet(), param_grid=param_grid, cv=5, scoring='neg_mean_squared_error')
grid_search_en.fit(X_train, y_train)
best_elasticnet = grid_search_en.best_estimator_

# 評估所有模型
models = {'Ridge': best_ridge, 'Lasso': best_lasso, 'ElasticNet': best_elasticnet}
for name, model in models.items():
y_test_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_test_pred)
r2 = r2_score(y_test, y_test_pred)
print(f"{name} 回歸 - 測試集均方誤差: {mse}, R^2 分?jǐn)?shù): {r2}")

整個代碼,偏向于實戰(zhàn),包括數(shù)據(jù)預(yù)處理、模型構(gòu)建、訓(xùn)練、評估和優(yōu)化。我們還通過與其他回歸模型進行比較,評估了 Ridge 回歸的性能。通過特征重要性分析,可以進一步理解哪些特征對預(yù)測最重要。

這一系列步驟和分析希望可以幫助到大家,在實際應(yīng)用中更好地理解和使用 Ridge 回歸。

模型分析

Ridge 回歸模型的優(yōu)缺點

優(yōu)點

  1. 解決多重共線性問題:Ridge 回歸通過引入  正則化項,可以有效地解決自變量之間存在多重共線性的問題,從而提高模型的穩(wěn)定性和預(yù)測性能。
  2. 防止過擬合:正則化項限制了回歸系數(shù)的大小,防止模型過擬合訓(xùn)練數(shù)據(jù),提升對新數(shù)據(jù)的泛化能力。
  3. 計算效率高:相比于某些復(fù)雜的非線性回歸模型,Ridge 回歸的計算效率較高,適用于大規(guī)模數(shù)據(jù)集
  4. 參數(shù)調(diào)整靈活:通過調(diào)整正則化參數(shù) ,可以在偏差和方差之間找到最佳平衡,從而優(yōu)化模型性能。

缺點

  1. 不適用于特征選擇:Ridge 回歸不會將不相關(guān)的特征系數(shù)縮減到零,因此不適用于需要進行特征選擇的場景。
  2. 無法處理非線性關(guān)系:Ridge 回歸是線性模型,如果數(shù)據(jù)中存在復(fù)雜的非線性關(guān)系,Ridge 回歸的表現(xiàn)可能不如非線性模型。
  3. 解釋性較差:由于引入了正則化項,Ridge 回歸模型的解釋性可能較差,不易于解釋每個特征對目標(biāo)值的具體影響。

與相似算法的對比

Lasso 回歸

Lasso 回歸(Least Absolute Shrinkage and Selection Operator)也是一種線性回歸模型,但其正則化項是?范數(shù):

優(yōu)點

缺點

ElasticNet 回歸

ElasticNet 回歸結(jié)合了 Ridge 回歸和 Lasso 回歸的特點,通過引入??和??正則化項:

優(yōu)點

缺點

使用場景分析

適合使用 Ridge 回歸的場景

  1. 特征之間存在多重共線性:當(dāng)特征之間存在高度相關(guān)性時,Ridge 回歸可以通過  正則化項有效地穩(wěn)定回歸系數(shù),提升模型的穩(wěn)定性和預(yù)測性能。
  2. 防止過擬合:如果數(shù)據(jù)集較小且存在過擬合的風(fēng)險,Ridge 回歸可以通過限制回歸系數(shù)的大小,防止模型過擬合。
  3. 模型解釋性不重要:在某些情況下,模型的預(yù)測性能比解釋性更重要,此時可以選擇 Ridge 回歸。

考慮其他算法的場景

  1. 需要特征選擇:如果需要選擇最相關(guān)的特征,Lasso 回歸或 ElasticNet 回歸更為適合,因為它們可以將不相關(guān)特征的系數(shù)縮減為零。
  2. 存在非線性關(guān)系:如果數(shù)據(jù)中存在復(fù)雜的非線性關(guān)系,可以考慮使用決策樹、隨機森林、支持向量機或神經(jīng)網(wǎng)絡(luò)等非線性模型。
  3. 高維數(shù)據(jù)集:對于特征數(shù)量遠大于樣本數(shù)量的高維數(shù)據(jù)集,Lasso 回歸或 ElasticNet 回歸可能表現(xiàn)更好,因為它們能夠產(chǎn)生更加稀疏的模型。

最后

總結(jié)一下,Ridge 通過引入??正則化項,可以有效地解決多重共線性問題,并防止過擬合。它在特征之間存在高度相關(guān)性、數(shù)據(jù)集較小且易過擬合的情況下表現(xiàn)良好。然而,對于需要特征選擇或處理非線性關(guān)系的場景,可以考慮使用 Lasso 回歸、ElasticNet 回歸或其他非線性模型。通過結(jié)合不同算法的優(yōu)缺點,實驗中大家需要選擇最適合特定問題的回歸模型,提升模型的預(yù)測性能和解釋性。

本文章轉(zhuǎn)載微信公眾號@深夜努力寫Python

上一篇:

快速突破PyTorch,構(gòu)建CNN圖像分類模型!!

下一篇:

講透一個強大算法模型,Lasso回歸 !!
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊

多API并行試用

數(shù)據(jù)驅(qū)動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費