首頁  >  文章  >  後端開發  >  Python中的多項式迴歸實例

Python中的多項式迴歸實例

WBOY
WBOY原創
2023-06-10 09:17:501858瀏覽

多項式迴歸是在迴歸問題中常用的方法,它透過對資料進行多項式擬合來建立模型,使得模型能夠更準確地預測目標值。 Python提供了豐富的資料處理和機器學習函式庫,可以方便地實作多項式迴歸模型。本文將介紹如何在Python中實現多項式迴歸,並給出一個基於多項式迴歸的實例。

一、多項式迴歸的原理

多項式迴歸的原理比較簡單,就是將自變數的值透過多項式函數來做解釋。即:

$y = b_0 b_1x_1 b_2x_2^2 ... b_nx_n^n$

其中,$y$ 是因變量,$b_0, b_1, b_2, ... , b_n $ 為迴歸係數,$x_1, x_2, ... , x_n$ 是自變數。由於多項式迴歸可以提高模型的彈性,所以常被用於需要高度擬合的問題。

二、Python實現多項式迴歸

Python中,可以透過scikit-learn函式庫來實現多項式迴歸。 scikit-learn函式庫是Python中常用的機器學習函式庫,提供了各種模型和工具來處理資料和建立模型。

下面給出一個簡單的多項式迴歸實作步驟:

  1. 導入所需的函式庫
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures

這裡導入了numpy函式庫、matplotlib函式庫、 sklearn庫中的LinearRegression類別和PolynomialFeatures類別。

  1. 準備資料
# 创建数据
x = np.linspace(-10, 10, num=50).reshape(-1, 1) # 自变量数据
y = np.sin(x) + np.random.randn(50, 1) * 0.2 # 因变量数据

這裡使用了numpy庫中的linspace函數,產生了50個從-10到10的等間隔自變數數據,並且用sin函數生成因變數資料。為了使結果更真實,還添加了一些隨機雜訊。

  1. 訓練模型
# 使用多项式模型拟合数据
poly_reg = PolynomialFeatures(degree=5) # degree表示多项式的次数
x_poly = poly_reg.fit_transform(x)
lin_reg = LinearRegression()
lin_reg.fit(x_poly, y)

這裡使用了PolynomialFeatures類別將自變數x轉換為多項式,然後再使用LinearRegression類別對多項式資料進行處理。透過fit方法來訓練模型。

  1. 視覺化結果
# 可视化结果
plt.scatter(x, y)
plt.plot(x, lin_reg.predict(poly_reg.fit_transform(x)), color='red')
plt.show()

這裡使用了matplotlib函式庫來視覺化結果。透過散佈圖顯示原始數據,並在圖上繪製了多項式迴歸曲線。

三、多項式迴歸的實例

考慮一個實例:根據汽車的速度和煞車時間預測行車距離。我們使用Udacity提供的資料集來解決這個問題。資料集中包括汽車的速度、煞車時間和對應的行車距離。

  1. 匯入所需的庫和資料
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures

# 读入数据
data = pd.read_csv('data/car.csv')

這裡讀取了儲存在csv檔案中的汽車資料集。

  1. 資料預處理
# 提取特征和目标
X = data.iloc[:, :-1].values
y = data.iloc[:, -1].values

# 将刹车时间转为2维数据
X = X.reshape(-1, 1)

# 划分训练集和测试集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)

這裡使用了pandas函式庫將資料讀取為DataFrame格式。然後使用iloc方法按列提取特徵和目標,並使用reshape函數將煞車時間轉換為2維資料。最後使用train_test_split函數將資料集按比例分成訓練集和測試集。

  1. 訓練與測試模型
# 训练模型
poly_reg = PolynomialFeatures(degree = 2)
X_poly = poly_reg.fit_transform(X_train)
lin_reg = LinearRegression()
model = lin_reg.fit(X_poly, y_train)

# 可视化结果
plt.scatter(X_train, y_train, color='red')
plt.plot(X_train, lin_reg.predict(poly_reg.fit_transform(X_train)), color='blue')
plt.title('Car distance prediction')
plt.xlabel('Speed + Brake Time')
plt.ylabel('Distance')
plt.show()

# 测试模型
y_pred = model.predict(poly_reg.fit_transform(X_test))

這裡使用了PolynomialFeatures類別將資料轉換為二次多項式,然後使用LinearRegression類別對多項式資料進行處理。再透過fit方法來訓練模型。最後使用predict方法來預測模型的結果。

  1. 評估模型
# 计算评估指标
from sklearn.metrics import mean_squared_error, r2_score
rmse = np.sqrt(mean_squared_error(y_test, y_pred))
r2 = r2_score(y_test, y_pred)

print('Root Mean Squared Error: ', rmse)
print('R2 Score: ', r2)

這裡使用了sklearn函式庫中的mean_squared_error函數和r2_score函數來計算評估指標,分別是均方根誤差(RMSE)和決定係數(R2)。

透過上述步驟,我們可以使用多項式迴歸模型預測汽車的行車距離。

總結

本文介紹了多項式迴歸的原理和在Python中的實作方法。透過一個汽車資料的預測實例,我們可以看到多項式迴歸在建立模型和預測結果的優點。當然,多項式迴歸也存在一些缺點,例如容易出現過擬合等問題。因此,在實際應用中需要根據實際情況選取適當的迴歸方法和參數。

以上是Python中的多項式迴歸實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn