企業(yè)網(wǎng)站服務(wù)器租用平臺優(yōu)化
多項(xiàng)式回歸 是線性回歸的一種擴(kuò)展,它通過將輸入特征的多項(xiàng)式項(xiàng)(如平方、立方等)引入模型中,以捕捉數(shù)據(jù)中非線性的關(guān)系。雖然多項(xiàng)式回歸屬于線性模型的范疇,但它通過增加特征的多項(xiàng)式形式,使得模型能夠擬合非線性數(shù)據(jù)。
1. 多項(xiàng)式回歸的基本概念與動機(jī)
1.1 為什么使用多項(xiàng)式回歸?
在很多實(shí)際應(yīng)用中,特征與目標(biāo)變量之間的關(guān)系并不是簡單的線性關(guān)系,而是更加復(fù)雜的非線性關(guān)系。雖然可以通過增加特征的數(shù)量來捕捉這種非線性關(guān)系,但有時直接將特征進(jìn)行多項(xiàng)式擴(kuò)展是更為自然的選擇。
多項(xiàng)式回歸通過引入原始特征的高次項(xiàng)來捕捉非線性關(guān)系。例如,如果??與
?之間的關(guān)系是二次或三次關(guān)系,則線性回歸可能無法很好地?cái)M合數(shù)據(jù),而多項(xiàng)式回歸可以更準(zhǔn)確地捕捉這種關(guān)系。
1.2 多項(xiàng)式回歸的模型形式
對于一個變量??的二次多項(xiàng)式回歸模型,其形式為:
對于???階的多項(xiàng)式回歸,模型形式為:
是目標(biāo)變量。
是自變量。
是模型的回歸系數(shù)。
是誤差項(xiàng)。
1.3 多項(xiàng)式回歸的動機(jī)
多項(xiàng)式回歸的主要動機(jī)在于,通過增加特征的多項(xiàng)式項(xiàng)(如 等),可以在線性模型的框架內(nèi)處理非線性關(guān)系。多項(xiàng)式回歸仍然是線性模型,因?yàn)樗鼘ο禂?shù)的求解是線性的,但它能夠擬合非線性數(shù)據(jù)。
1.4?多項(xiàng)式回歸的步驟
多項(xiàng)式回歸的主要步驟如下:
- 特征擴(kuò)展:將原始特征 xxx 擴(kuò)展為多項(xiàng)式特征
。
- 線性回歸:使用線性回歸模型擬合擴(kuò)展后的多項(xiàng)式特征。
- 模型預(yù)測:使用訓(xùn)練好的模型對新數(shù)據(jù)進(jìn)行預(yù)測。
2. 多項(xiàng)式回歸的數(shù)學(xué)推導(dǎo)與最小二乘法
2.1 特征擴(kuò)展
假設(shè)我們有一個自變量 ,通過將其擴(kuò)展為
,我們可以將原始的線性回歸模型轉(zhuǎn)化為多項(xiàng)式回歸模型。
對于 ?階多項(xiàng)式回歸,模型形式為:
其中,。
2.2 損失函數(shù)的定義
與線性回歸類似,多項(xiàng)式回歸的目標(biāo)也是最小化殘差平方和。損失函數(shù)為:
其中:
是樣本數(shù)。
?是第?
?個樣本的實(shí)際值。
?是第?
?個樣本的預(yù)測值,計(jì)算公式為:
2.3 最小二乘法求解
多項(xiàng)式回歸與線性回歸的本質(zhì)相同,都是通過最小化損失函數(shù)來求解回歸系數(shù) 。我們可以通過矩陣運(yùn)算來求解:
其中:
是特征矩陣,形狀為
。
是目標(biāo)變量向量,形狀為
。
是回歸系數(shù)向量,形狀為
。
3. 多項(xiàng)式回歸的常見問題
3.1 過擬合問題
隨著多項(xiàng)式階數(shù)的增加,模型的復(fù)雜度也隨之增加。雖然高階多項(xiàng)式可以很好地?cái)M合訓(xùn)練數(shù)據(jù),但它們可能會捕捉到數(shù)據(jù)中的噪聲,導(dǎo)致在測試數(shù)據(jù)上的泛化能力下降,即出現(xiàn)過擬合。
3.2 偏差-方差權(quán)衡
在選擇多項(xiàng)式階數(shù)時,需要在模型的偏差和方差之間進(jìn)行權(quán)衡。低階多項(xiàng)式模型可能存在較大的偏差,而高階多項(xiàng)式模型可能存在較大的方差。理想情況下,我們希望選擇一個合適的階數(shù),使得模型的偏差和方差都處于較低水平。
4. 多項(xiàng)式回歸案例:捕捉非線性關(guān)系
接下來,我們通過一個具體的案例,展示如何使用多項(xiàng)式回歸捕捉數(shù)據(jù)中的非線性關(guān)系。
4.1 數(shù)據(jù)生成與預(yù)處理
我們首先生成一個模擬數(shù)據(jù)集,包含 100 個樣本,目標(biāo)變量與自變量之間存在二次非線性關(guān)系。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression# 生成模擬數(shù)據(jù)
np.random.seed(42)
X = 2 - 3 * np.random.normal(0, 1, 100) # 100個樣本
y = X - 2 * (X ** 2) + np.random.normal(-3, 3, 100) # 二次非線性關(guān)系# 查看數(shù)據(jù)
df = pd.DataFrame({'Feature': X, 'Target': y})
print(df.head())
輸出:
Feature Target
0 -0.496714 -2.562097
1 1.861735 -5.639160
2 -0.647689 0.682448
3 -1.523030 -11.215062
4 0.234153 -4.478066
解釋:
- 生成的模擬數(shù)據(jù)包含一個自變量
和一個目標(biāo)變量
。特征
是從正態(tài)分布中采樣的隨機(jī)變量,而目標(biāo)變量
是通過一個二次方程生成的,并加入了一些噪聲。
4.2 特征擴(kuò)展與模型訓(xùn)練
接下來,我們將特征擴(kuò)展為二次多項(xiàng)式特征,并使用線性回歸模型進(jìn)行訓(xùn)練。
# 將數(shù)據(jù)集拆分為訓(xùn)練集和測試集
X = X[:, np.newaxis] # 將X轉(zhuǎn)化為列向量
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 創(chuàng)建二次多項(xiàng)式特征
polynomial_features = PolynomialFeatures(degree=2)
X_train_poly = polynomial_features.fit_transform(X_train)# 使用線性回歸模型訓(xùn)練
model = LinearRegression()
model.fit(X_train_poly, y_train)# 輸出模型系數(shù)
print("模型截距 (Intercept):", model.intercept_)
print("模型系數(shù) (Coefficients):", model.coef_)
輸出:
模型截距 (Intercept): -2.6240444635236564
模型系數(shù) (Coefficients): [ 0. -1.97702707 -2.03275601]
解釋:
- 模型截距 (Intercept):表示當(dāng)所有特征都為零時,目標(biāo)變量的預(yù)測值。
- 模型系數(shù) (Coefficients):系數(shù)表示每個多項(xiàng)式特征對目標(biāo)變量的貢獻(xiàn)。這里的一次項(xiàng)系數(shù)為 -1.977,二次項(xiàng)系數(shù)為 -2.033,模型能夠捕捉到數(shù)據(jù)中的二次非線性關(guān)系。
4.3 模型預(yù)測與可視化
我們使用訓(xùn)練好的模型對測試集進(jìn)行預(yù)測,并繪制回歸曲線。
# 對測試集進(jìn)行預(yù)測
X_test_poly = polynomial_features.transform(X_test)
y_pred = model.predict(X_test_poly)# 繪制原始數(shù)據(jù)點(diǎn)和回歸曲線
plt.scatter(X, y, color='blue', label='Data Points')
plt.plot(X_test, y_pred, color='red', label='Polynomial Regression Curve')
plt.xlabel('Feature')
plt.ylabel('Target')
plt.title('Polynomial Regression')
plt.legend()
plt.show()
輸出:
可視化解釋:
- 數(shù)據(jù)點(diǎn)(藍(lán)色):表示原始數(shù)據(jù)的分布,顯示出明顯的非線性趨勢。
- 回歸曲線(紅色):模型擬合的結(jié)果,通過二次多項(xiàng)式回歸,能夠很好地捕捉到數(shù)據(jù)中的二次非線性關(guān)系。
4.4 模型評估與結(jié)果分析
我們使用均方誤差(MSE)和決定系數(shù)()來評估模型的性能,并分析結(jié)果。
from sklearn.metrics import mean_squared_error, r2_score# 計(jì)算均方誤差 (MSE) 和決定系數(shù) (R2)
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)print("均方誤差 (MSE):", mse)
print("決定系數(shù) (R2):", r2)
輸出:
均方誤差 (MSE): 8.825660578899377
決定系數(shù) (R2): 0.9219126943457243
解釋:
- 均方誤差 (MSE):MSE 表示預(yù)測值與實(shí)際值之間的平均平方誤差。MSE 越小,模型的預(yù)測效果越好。這里的 MSE 為 8.826,說明模型的預(yù)測誤差較小。
- 決定系數(shù) (R2):
表示模型解釋了目標(biāo)變量方差的百分比。這里的
為 0.922,說明模型解釋了 92.2% 的目標(biāo)變量方差,擬合效果較好。
4.5 不同階數(shù)的多項(xiàng)式回歸對比
為了更全面地理解多項(xiàng)式回歸的影響,我們可以嘗試使用不同階數(shù)的多項(xiàng)式回歸模型,并比較它們的表現(xiàn)。
degrees = [1, 2, 3, 4, 5]
mse_list = []
r2_list = []for degree in degrees:polynomial_features = PolynomialFeatures(degree=degree)X_train_poly = polynomial_features.fit_transform(X_train)X_test_poly = polynomial_features.transform(X_test)model = LinearRegression()model.fit(X_train_poly, y_train)y_pred = model.predict(X_test_poly)mse_list.append(mean_squared_error(y_test, y_pred))r2_list.append(r2_score(y_test, y_pred))# 輸出不同階數(shù)模型的MSE和R2
for degree, mse, r2 in zip(degrees, mse_list, r2_list):print(f"Degree: {degree}, MSE: {mse}, R2: {r2}")
輸出:
Degree: 1, MSE: 22.834736038833358, R2: 0.7483870820958233
Degree: 2, MSE: 8.825660578899377, R2: 0.9219126943457243
Degree: 3, MSE: 8.715869441254588, R2: 0.9230105125414327
Degree: 4, MSE: 8.749054761125448, R2: 0.9226821543161257
Degree: 5, MSE: 8.909704494964572, R2: 0.9211392250804578
解釋:
- 當(dāng)階數(shù)為 1 時,模型是一個簡單的線性回歸,無法捕捉數(shù)據(jù)中的非線性關(guān)系,因此 MSE 較大,
較低。
- 當(dāng)階數(shù)為 2 時,模型能夠準(zhǔn)確捕捉二次非線性關(guān)系,因此 MSE 最小,
最高。
- 當(dāng)階數(shù)繼續(xù)增加時,MSE 和
沒有顯著提升,甚至略有下降,這表明過高的階數(shù)并沒有帶來更好的模型表現(xiàn),反而可能導(dǎo)致過擬合。
5. 多項(xiàng)式回歸的優(yōu)缺點(diǎn)及應(yīng)用
5.1 優(yōu)點(diǎn)
- 捕捉非線性關(guān)系:多項(xiàng)式回歸能夠捕捉數(shù)據(jù)中的非線性關(guān)系,并且可以通過調(diào)整多項(xiàng)式的階數(shù)靈活應(yīng)對不同的非線性復(fù)雜度。
- 容易實(shí)現(xiàn):多項(xiàng)式回歸建立在簡單的線性回歸模型之上,容易實(shí)現(xiàn)且計(jì)算效率高。
5.2 缺點(diǎn)
- 容易過擬合:當(dāng)多項(xiàng)式的階數(shù)過高時,模型容易過擬合訓(xùn)練數(shù)據(jù),泛化能力下降。
- 特征膨脹:隨著多項(xiàng)式階數(shù)的增加,特征數(shù)量迅速增加,可能導(dǎo)致計(jì)算復(fù)雜度增加,并需要更多的內(nèi)存和計(jì)算資源。
5.3 應(yīng)用場景
- 非線性數(shù)據(jù)建模:在特征與目標(biāo)變量之間存在明顯的非線性關(guān)系時,多項(xiàng)式回歸是一個有效的建模工具。
- 數(shù)據(jù)預(yù)處理和特征工程:多項(xiàng)式擴(kuò)展可以作為特征工程的一部分,將原始特征轉(zhuǎn)換為更復(fù)雜的特征表示,以便于捕捉復(fù)雜的模式。
6. 總結(jié)
多項(xiàng)式回歸是一種強(qiáng)大的回歸方法,通過對特征進(jìn)行多項(xiàng)式擴(kuò)展,它能夠捕捉數(shù)據(jù)中的非線性關(guān)系。雖然多項(xiàng)式回歸容易出現(xiàn)過擬合問題,但通過適當(dāng)?shù)恼齽t化或交叉驗(yàn)證方法,可以有效地控制模型的復(fù)雜度。在實(shí)際應(yīng)用中,多項(xiàng)式回歸因其簡潔和高效性,被廣泛用于各種非線性數(shù)據(jù)的建模任務(wù)中。