回歸(Regression)是機器學習中的一種基本方法,其目標是通過分析自變量與因變量之間的關系,建立一個數學模型來預測因變量的值。

線性回歸、多項式回歸、正則化線性回歸是機器學習中常用的回歸分析方法。其中線性回歸用直線擬合數據關系,多項式回歸用曲線擬合復雜關系,正則化線性回歸通過加約束來防止模型過于復雜。

一、線性回歸

線性回歸(Linear Regression)是什么?線性回歸是一種統計方法,用于建模兩個或多個變量之間的關系。它假設因變量和自變量之間的關系是線性的,并試圖找到最小化誤差平方和的最佳擬合直線。

如何實現線性回歸模型并進行可視化?

Python中實現一個線性回歸模型并進行可視化,可以使用scikit-learn庫來擬合模型,并使用matplotlib庫來進行可視化。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split

# 生成一些示例數據
np.random.seed(0) # 設置隨機種子以獲得可重復的結果
X = 2 * np.random.rand(100, 1) # 生成100個0到2之間的隨機數作為自變量
y = 4 + 3 * X + np.random.randn(100, 1) # 生成因變量,其中加入了隨機噪聲

# 將數據集拆分為訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 創建線性回歸模型并擬合訓練數據
model = LinearRegression()
model.fit(X_train, y_train)

# 使用模型進行預測
y_pred = model.predict(X_test)

# 可視化結果
plt.scatter(X, y, color='blue', label='Data Points') # 繪制數據點
plt.plot(X_test, y_pred, color='red', linewidth=2, label='Regression Line') # 繪制回歸線
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.title('Linear Regression')
plt.show()

# 打印模型參數
print(f'Intercept: {model.intercept_[0]}')
print(f'Coefficient: {model.coef_[0][0]}')

二、多項式回歸

多項式回歸(Polynomial Regression)是什么?多項式回歸是線性回歸的一種推廣,它允許因變量和自變量之間存在非線性關系。通過在傳統的線性回歸模型中增加變量的高次項(如平方項、立方項等),來捕捉數據中的非線性關系。

如何實現多項式回歸模型并進行可視化?在Python中實現多項式回歸模型并進行可視化,可以使用numpy來生成數據和計算多項式特征,scikit-learnLinearRegression來擬合模型,以及matplotlib來進行可視化。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures

# 生成一些示例數據
np.random.seed(0)
X = np.sort(5 * np.random.rand(40, 1), axis=0) # 生成40個0到5之間的隨機數并排序作為自變量
y = np.sin(X).ravel() + np.random.normal(0, 0.1, X.shape[0]) # 生成因變量,其中加入了隨機噪聲

# 定義多項式的次數
degree = 3

# 創建多項式特征
poly = PolynomialFeatures(degree)
X_poly = poly.fit_transform(X)

# 創建線性回歸模型并擬合多項式特征數據
model = LinearRegression()
model.fit(X_poly, y)

# 使用模型進行預測
X_test = np.linspace(0, 5, 100).reshape(-1, 1) # 生成測試數據
X_test_poly = poly.transform(X_test)
y_pred = model.predict(X_test_poly)

# 可視化結果
plt.scatter(X, y, color='blue', label='Data Points') # 繪制數據點
plt.plot(X_test, y_pred, color='red', linewidth=2, label='Polynomial Regression') # 繪制多項式回歸曲線
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.title(f'Polynomial Regression (degree={degree})')
plt.show()

# 打印模型參數(可選)
# 由于多項式回歸的系數較多,這里只打印出來供參考,通常不會直接解釋這些系數
print("Model coefficients:", model.coef_)
print("Model intercept:", model.intercept_)

三、正則化線性回歸

正則化線性回歸(Regularized Linear Regression)是什么?正則化線性回歸是一種用于處理線性回歸模型過擬合問題的技術。通過在模型的損失函數中引入額外的懲罰項,限制模型參數的大小,從而減少過擬合的風險。

正則化線性回歸類型有哪些?嶺回歸側重于通過最小化參數平方和來防止模型過擬合,尤其適用于處理共線性問題;Lasso回歸則強調稀疏性,通過推動參數變為零來實現特征選擇;彈性網絡回歸結合了嶺回歸和Lasso回歸的特點,平衡了正則化項,既處理過擬合又進行特征選擇。

如何實現正則化線性回歸模型并進行可視化?在Python中實現正則化線性回歸模型并進行可視化,可以使用scikit-learn庫來實現嶺回歸(Ridge Regression)、Lasso回歸以及彈性網絡回歸(Elastic Net Regression),并使用matplotlib庫來可視化結果。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import Ridge, Lasso, ElasticNet
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline
from sklearn.model_selection import train_test_split

# 生成示例數據
np.random.seed(0)
X = 2 * np.random.rand(100, 1) - 1 # 生成-1到1之間的隨機數作為自變量
y = 4 + 3 * X + np.random.randn(100, 1) * 0.5 # 生成因變量,加入隨機噪聲

# 標準化數據(對于Lasso和ElasticNet很重要)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 拆分數據集為訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)

# 定義正則化參數
alpha = 1.0

# 創建嶺回歸模型并擬合數據
ridge = Ridge(alpha=alpha)
ridge.fit(X_train, y_train)

# 創建Lasso回歸模型并擬合數據
lasso = Lasso(alpha=alpha)
lasso.fit(X_train, y_train)

# 創建彈性網絡回歸模型并擬合數據(這里使用l1_ratio=0.5表示L1和L2正則化的混合)
elastic_net = ElasticNet(alpha=alpha, l1_ratio=0.5)
elastic_net.fit(X_train, y_train)

# 使用模型進行預測
X_test_scaled = scaler.transform(X_test) # 注意:測試數據也需要經過相同的標準化處理
y_pred_ridge = ridge.predict(X_test_scaled)
y_pred_lasso = lasso.predict(X_test_scaled)
y_pred_elastic_net = elastic_net.predict(X_test_scaled)

# 可視化結果
plt.scatter(X_test, y_test, color='blue', label='Data Points') # 繪制數據點
plt.plot(X_test, y_pred_ridge, color='red', linewidth=2, label='Ridge Regression') # 繪制嶺回歸線
plt.plot(X_test, y_pred_lasso, color='green', linewidth=2, label='Lasso Regression') # 繪制Lasso回歸線
plt.plot(X_test, y_pred_elastic_net, color='purple', linewidth=2, label='Elastic Net Regression') # 繪制彈性網絡回歸線
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.title('Regularized Linear Regression')
plt.show()

本文章轉載微信公眾號@架構師帶你玩轉AI

上一篇:

神經網絡算法 - 一文搞懂Transformer

下一篇:

一文徹底搞懂機器學習 - 端到端機器學習
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

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

#AI深度推理大模型API

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

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