回歸(Regression)是機(jī)器學(xué)習(xí)中的一種基本方法,其目標(biāo)是通過(guò)分析自變量與因變量之間的關(guān)系,建立一個(gè)數(shù)學(xué)模型來(lái)預(yù)測(cè)因變量的值。

線性回歸、多項(xiàng)式回歸、正則化線性回歸是機(jī)器學(xué)習(xí)中常用的回歸分析方法。其中線性回歸用直線擬合數(shù)據(jù)關(guān)系,多項(xiàng)式回歸用曲線擬合復(fù)雜關(guān)系,正則化線性回歸通過(guò)加約束來(lái)防止模型過(guò)于復(fù)雜。

一、線性回歸

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

如何實(shí)現(xiàn)線性回歸模型并進(jìn)行可視化?

Python中實(shí)現(xiàn)一個(gè)線性回歸模型并進(jìn)行可視化,可以使用scikit-learn庫(kù)來(lái)擬合模型,并使用matplotlib庫(kù)來(lái)進(jìn)行可視化。

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

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

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

# 創(chuàng)建線性回歸模型并擬合訓(xùn)練數(shù)據(jù)
model = LinearRegression()
model.fit(X_train, y_train)

# 使用模型進(jìn)行預(yù)測(cè)
y_pred = model.predict(X_test)

# 可視化結(jié)果
plt.scatter(X, y, color='blue', label='Data Points') # 繪制數(shù)據(jù)點(diǎn)
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()

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

二、多項(xiàng)式回歸

多項(xiàng)式回歸(Polynomial Regression)是什么?多項(xiàng)式回歸是線性回歸的一種推廣,它允許因變量和自變量之間存在非線性關(guān)系。通過(guò)在傳統(tǒng)的線性回歸模型中增加變量的高次項(xiàng)(如平方項(xiàng)、立方項(xiàng)等),來(lái)捕捉數(shù)據(jù)中的非線性關(guān)系。

如何實(shí)現(xiàn)多項(xiàng)式回歸模型并進(jìn)行可視化?在Python中實(shí)現(xiàn)多項(xiàng)式回歸模型并進(jìn)行可視化,可以使用numpy來(lái)生成數(shù)據(jù)和計(jì)算多項(xiàng)式特征,scikit-learnLinearRegression來(lái)擬合模型,以及matplotlib來(lái)進(jìn)行可視化。

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

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

# 定義多項(xiàng)式的次數(shù)
degree = 3

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

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

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

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

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

三、正則化線性回歸

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

正則化線性回歸類型有哪些?嶺回歸側(cè)重于通過(guò)最小化參數(shù)平方和來(lái)防止模型過(guò)擬合,尤其適用于處理共線性問(wèn)題;Lasso回歸則強(qiáng)調(diào)稀疏性,通過(guò)推動(dòng)參數(shù)變?yōu)榱銇?lái)實(shí)現(xiàn)特征選擇;彈性網(wǎng)絡(luò)回歸結(jié)合了嶺回歸和Lasso回歸的特點(diǎn),平衡了正則化項(xiàng),既處理過(guò)擬合又進(jìn)行特征選擇。

如何實(shí)現(xiàn)正則化線性回歸模型并進(jìn)行可視化?在Python中實(shí)現(xiàn)正則化線性回歸模型并進(jìn)行可視化,可以使用scikit-learn庫(kù)來(lái)實(shí)現(xiàn)嶺回歸(Ridge Regression)、Lasso回歸以及彈性網(wǎng)絡(luò)回歸(Elastic Net Regression),并使用matplotlib庫(kù)來(lái)可視化結(jié)果。

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

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

# 標(biāo)準(zhǔn)化數(shù)據(jù)(對(duì)于Lasso和ElasticNet很重要)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 拆分?jǐn)?shù)據(jù)集為訓(xùn)練集和測(cè)試集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)

# 定義正則化參數(shù)
alpha = 1.0

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

# 創(chuàng)建Lasso回歸模型并擬合數(shù)據(jù)
lasso = Lasso(alpha=alpha)
lasso.fit(X_train, y_train)

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

# 使用模型進(jìn)行預(yù)測(cè)
X_test_scaled = scaler.transform(X_test) # 注意:測(cè)試數(shù)據(jù)也需要經(jīng)過(guò)相同的標(biāo)準(zhǔn)化處理
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)

# 可視化結(jié)果
plt.scatter(X_test, y_test, color='blue', label='Data Points') # 繪制數(shù)據(jù)點(diǎn)
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') # 繪制彈性網(wǎng)絡(luò)回歸線
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.title('Regularized Linear Regression')
plt.show()

本文章轉(zhuǎn)載微信公眾號(hào)@架構(gòu)師帶你玩轉(zhuǎn)AI

上一篇:

神經(jīng)網(wǎng)絡(luò)算法 - 一文搞懂Transformer

下一篇:

一文徹底搞懂機(jī)器學(xué)習(xí) - 端到端機(jī)器學(xué)習(xí)
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊(cè)

多API并行試用

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

查看全部API→
??

熱門(mén)場(chǎng)景實(shí)測(cè),選對(duì)API

#AI文本生成大模型API

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

25個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)

#AI深度推理大模型API

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

10個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)