柚子快報激活碼778899分享:線性回歸 回歸算法詳解
柚子快報激活碼778899分享:線性回歸 回歸算法詳解
回歸算法詳解
回歸分析是一類重要的機器學習方法,主要用于預測連續(xù)變量。本文將詳細講解幾種常見的回歸算法,包括線性回歸、嶺回歸、Lasso 回歸、彈性網(wǎng)絡(luò)回歸、決策樹回歸和支持向量回歸(SVR),并展示它們的特點、應用場景及其在 Python 中的實現(xiàn)。
一 什么是回歸分析?
回歸分析是一種統(tǒng)計方法,用于確定因變量(目標變量)和自變量(預測變量)之間的關(guān)系?;貧w分析的目標是建立一個模型,通過自變量預測因變量。
二 常見回歸算法
1. 線性回歸
線性回歸是最基本的回歸方法,假設(shè)因變量和自變量之間存在線性關(guān)系。線性回歸的目標是找到一條直線,使得所有數(shù)據(jù)點到該直線的距離之和最小。 線性回歸模型的方程為:
?
y
=
β
0
+
β
1
x
1
+
β
2
x
2
+
…
+
β
n
x
n
+
?
?
\ y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \ldots + \beta_n x_n + \epsilon \
?y=β0?+β1?x1?+β2?x2?+…+βn?xn?+?? 其中,
?
β
0
\ \beta_0
?β0? 是截距,
?
β
i
\ \beta_i
?βi? 是自變量
?
x
i
\ x_i
?xi? 的回歸系數(shù),
?
?
\ \epsilon
?? 是誤差項。
損失函數(shù)
最小化均方誤差(Mean Squared Error, MSE):
?MSE
=
1
n
∑
i
=
1
n
(
y
i
?
y
^
i
)
2
?
\ \text{MSE} = \frac{1}{n} \sum_{i=1}^n (y_i - \hat{y}_i)^2 \
?MSE=n1?i=1∑n?(yi??y^?i?)2?
特點
簡單易懂:線性回歸是最簡單的回歸模型,易于解釋和實現(xiàn)。計算速度快:適用于大規(guī)模數(shù)據(jù)集。易于擴展:可以通過添加多項式項、交互項等擴展為更復雜的模型。
應用場景
線性回歸適用于因變量和自變量之間存在線性關(guān)系的場景,例如經(jīng)濟學中的供求關(guān)系、工程中的溫度與壓力關(guān)系等。
2. 嶺回歸
嶺回歸(Ridge Regression)是一種線性回歸的變種,通過在損失函數(shù)中加入
?
L
2
\ L2
?L2 正則化項來防止過擬合。
嶺回歸的損失函數(shù)為:
?Loss
=
1
n
∑
i
=
1
n
(
y
i
?
y
^
i
)
2
+
λ
∑
j
=
1
n
β
j
2
?
\ \text{Loss} = \frac{1}{n} \sum_{i=1}^n (y_i - \hat{y}_i)^2 + \lambda \sum_{j=1}^n \beta_j^2 \
?Loss=n1?i=1∑n?(yi??y^?i?)2+λj=1∑n?βj2?? 其中,
λ
\lambda
λ是正則化參數(shù)。
特點
防止過擬合:通過正則化項控制模型的復雜度,防止過擬合。處理共線性:適用于自變量之間存在較強相關(guān)性的情況。參數(shù)選擇:需要調(diào)優(yōu)正則化參數(shù)
λ
\lambda
λ。
應用場景
嶺回歸適用于高維數(shù)據(jù)集和自變量之間存在共線性的場景,如基因表達數(shù)據(jù)分析、文本數(shù)據(jù)分類等。
3. Lasso 回歸
Lasso 回歸(Least Absolute Shrinkage and Selection Operator Regression)通過加入
L
1
L1
L1 正則化項來防止過擬合,并能夠進行特征選擇。
Lasso 回歸的損失函數(shù)為:
?Loss
=
1
n
∑
i
=
1
n
(
y
i
?
y
^
i
)
2
+
λ
∑
j
=
1
n
∣
β
j
∣
?
\ \text{Loss} = \frac{1}{n} \sum_{i=1}^n (y_i - \hat{y}_i)^2 + \lambda \sum_{j=1}^n |\beta_j| \
?Loss=n1?i=1∑n?(yi??y^?i?)2+λj=1∑n?∣βj?∣?
特點
特征選擇:通過
L
1
L1
L1 正則化,將不重要的特征系數(shù)收縮為零,從而實現(xiàn)特征選擇。防止過擬合:與嶺回歸類似,Lasso 回歸也能夠控制模型的復雜度。參數(shù)選擇:需要調(diào)優(yōu)正則化參數(shù)
λ
\lambda
λ。
應用場景
Lasso 回歸適用于高維數(shù)據(jù)和特征選擇的場景,如基因數(shù)據(jù)分析、文本分類、圖像處理等。
4. 彈性網(wǎng)絡(luò)回歸
彈性網(wǎng)絡(luò)回歸(Elastic Net Regression)結(jié)合了嶺回歸和 Lasso 回歸的正則化項,能夠同時進行特征選擇和防止過擬合。
彈性網(wǎng)絡(luò)回歸的損失函數(shù)為:
?Loss
=
1
n
∑
i
=
1
n
(
y
i
?
y
^
i
)
2
+
λ
1
∑
j
=
1
n
∣
β
j
∣
+
λ
2
∑
j
=
1
n
β
j
2
?
\ \text{Loss} = \frac{1}{n} \sum_{i=1}^n (y_i - \hat{y}_i)^2 + \lambda_1 \sum_{j=1}^n |\beta_j| + \lambda_2 \sum_{j=1}^n \beta_j^2 \
?Loss=n1?i=1∑n?(yi??y^?i?)2+λ1?j=1∑n?∣βj?∣+λ2?j=1∑n?βj2??
特點
特征選擇與防止過擬合:結(jié)合了 Lasso 和嶺回歸的優(yōu)點,能夠進行特征選擇并防止過擬合。適用于高維數(shù)據(jù):在高維數(shù)據(jù)集上表現(xiàn)良好。參數(shù)選擇:需要調(diào)優(yōu)兩個正則化參數(shù)
λ
1
\lambda_1
λ1? 和
λ
2
\lambda_2
λ2?。
應用場景
彈性網(wǎng)絡(luò)回歸適用于高維數(shù)據(jù)和特征選擇的場景,尤其是當自變量之間存在高度相關(guān)性時。
5. 決策樹回歸
決策樹回歸通過構(gòu)建決策樹來進行回歸,能夠捕捉非線性關(guān)系。
算法步驟
將數(shù)據(jù)集劃分為若干子集。對每個子集,選擇一個特征及其取值進行劃分,使得劃分后的均方誤差最小。遞歸地對每個子集進行上述劃分,直到滿足停止條件。
特點
捕捉非線性關(guān)系:決策樹能夠處理非線性和交互效應。易于解釋:決策樹的結(jié)構(gòu)直觀易懂,便于解釋。易受過擬合影響:需要剪枝等技術(shù)來防止過擬合。
應用場景
決策樹回歸適用于數(shù)據(jù)集特征和目標變量之間存在非線性關(guān)系的場景,如市場預測、醫(yī)學診斷等。
6. 支持向量回歸(SVR)
支持向量回歸(Support Vector Regression, SVR)是支持向量機的擴展,用于回歸分析。SVR 尋找一個函數(shù),使得大多數(shù)數(shù)據(jù)點都在一個容忍范圍內(nèi)。
SVR 的優(yōu)化目標為:
?
min
?
w
,
b
,
ξ
,
ξ
?
1
2
∥
w
∥
2
+
C
∑
i
=
1
n
(
ξ
i
+
ξ
i
?
)
?
\ \min_{w,b,\xi,\xi^*} \frac{1}{2} \|w\|^2 + C \sum_{i=1}^n (\xi_i + \xi_i^*) \
?w,b,ξ,ξ?min?21?∥w∥2+Ci=1∑n?(ξi?+ξi??)? 約束條件為:
?
y
i
?
(
w
?
x
i
+
b
)
≤
?
+
ξ
i
?
,
?
(
w
?
x
i
+
b
)
?
y
i
≤
?
+
ξ
i
?
?
;
?
ξ
i
,
ξ
i
?
≥
0
\ y_i - (w \cdot x_i + b) \leq \epsilon + \xi_i \ , \ (w \cdot x_i + b) - y_i \leq \epsilon + \xi_i^* \ ; \ \xi_i, \xi_i^* \geq 0
?yi??(w?xi?+b)≤?+ξi??,?(w?xi?+b)?yi?≤?+ξi???;?ξi?,ξi??≥0 其中,
?
?
\ \epsilon
?? 是容忍范圍,
?
ξ
i
\ \xi_i
?ξi?和
?
ξ
i
?
\ \xi_i^*
?ξi??是松弛變量,
C
C
C 是懲罰參數(shù)。
特點
處理非線性關(guān)系:通過核方法,SVR 能夠處理復雜的非線性關(guān)系。魯棒性強:對噪聲和異常值具有較強的魯棒性。參數(shù)選擇復雜:需要調(diào)優(yōu)核函數(shù)和懲罰參數(shù)
C
C
C。
應用場景
SVR 適用于處理復雜非線性數(shù)據(jù)的場景,如股票價格預測、能源消耗預測等。
三 回歸算法的 Python 實現(xiàn)
下面通過 Python 代碼實現(xiàn)上述回歸算法,并以一個示例數(shù)據(jù)集展示其應用。
導入庫
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression, Ridge, Lasso, ElasticNet
from sklearn.tree import DecisionTreeRegressor
from sklearn.svm import SVR
from sklearn.metrics import mean_squared_error
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽
plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號
生成示例數(shù)據(jù)集
# 生成示例數(shù)據(jù)集
X, y = make_regression(n_samples=100, n_features=1, noise=10, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
plt.scatter(X, y, color='blue')
plt.title('Sample Data')
plt.xlabel('Feature')
plt.ylabel('Target')
plt.show()
線性回歸
# 線性回歸
linear_reg = LinearRegression()
linear_reg.fit(X_train, y_train)
y_pred = linear_reg.predict(X_test)
print('Linear Regression MSE:', mean_squared_error(y_test, y_pred))
plt.scatter(X_test, y_test, color='blue')
plt.plot(X_test, y_pred, color='red')
plt.title('Linear Regression')
plt.xlabel('Feature')
plt.ylabel('Target')
plt.show()
嶺回歸
# 嶺回歸
ridge_reg = Ridge(alpha=1.0)
ridge_reg.fit(X_train, y_train)
y_pred = ridge_reg.predict(X_test)
print('Ridge Regression MSE:', mean_squared_error(y_test, y_pred))
plt.scatter(X_test, y_test, color='blue')
plt.plot(X_test, y_pred, color='red')
plt.title('Ridge Regression')
plt.xlabel('Feature')
plt.ylabel('Target')
plt.show()
Lasso 回歸
# Lasso 回歸
lasso_reg = Lasso(alpha=0.1)
lasso_reg.fit(X_train, y_train)
y_pred = lasso_reg.predict(X_test)
print('Lasso Regression MSE:', mean_squared_error(y_test, y_pred))
plt.scatter(X_test, y_test, color='blue')
plt.plot(X_test, y_pred, color='red')
plt.title('Lasso Regression')
plt.xlabel('Feature')
plt.ylabel('Target')
plt.show()
彈性網(wǎng)絡(luò)回歸
# 彈性網(wǎng)絡(luò)回歸
elastic_net_reg = ElasticNet(alpha=0.1, l1_ratio=0.5)
elastic_net_reg.fit(X_train, y_train)
y_pred = elastic_net_reg.predict(X_test)
print('Elastic Net Regression MSE:', mean_squared_error(y_test, y_pred))
plt.scatter(X_test, y_test, color='blue')
plt.plot(X_test, y_pred, color='red')
plt.title('Elastic Net Regression')
plt.xlabel('Feature')
plt.ylabel('Target')
plt.show()
決策樹回歸
# 決策樹回歸
tree_reg = DecisionTreeRegressor()
tree_reg.fit(X_train, y_train)
y_pred = tree_reg.predict(X_test)
print('Decision Tree Regression MSE:', mean_squared_error(y_test, y_pred))
plt.scatter(X_test, y_test, color='blue')
plt.scatter(X_test, y_pred, color='red')
plt.title('Decision Tree Regression')
plt.xlabel('Feature')
plt.ylabel('Target')
plt.show()
支持向量回歸(SVR)
# 支持向量回歸
svr_reg = SVR(kernel='rbf', C=100, epsilon=0.1)
svr_reg.fit(X_train, y_train)
y_pred = svr_reg.predict(X_test)
print('SVR MSE:', mean_squared_error(y_test, y_pred))
plt.scatter(X_test, y_test, color='blue')
plt.scatter(X_test, y_pred, color='red')
plt.title('Support Vector Regression')
plt.xlabel('Feature')
plt.ylabel('Target')
plt.show()
總結(jié)
回歸分析是機器學習中的一類重要方法,用于預測連續(xù)變量。本文介紹了幾種常見的回歸算法,包括線性回歸、嶺回歸、Lasso 回歸、彈性網(wǎng)絡(luò)回歸、決策樹回歸和支持向量回歸,并展示了它們的數(shù)學公式、特點、應用場景及其在 Python 中的實現(xiàn)。不同的回歸算法適用于不同的應用場景,通過合理選擇算法,可以在實際應用中取得良好的預測效果。希望本文能幫助你更好地理解和應用回歸算法。
我的其他同系列博客
支持向量機(SVM算法詳解) knn算法詳解 GBDT算法詳解 XGBOOST算法詳解 CATBOOST算法詳解 隨機森林算法詳解 lightGBM算法詳解 對比分析:GBDT、XGBoost、CatBoost和LightGBM 機器學習參數(shù)尋優(yōu):方法、實例與分析
柚子快報激活碼778899分享:線性回歸 回歸算法詳解
相關(guān)文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。