多項式迴歸是在迴歸問題中常用的方法,它透過對資料進行多項式擬合來建立模型,使得模型能夠更準確地預測目標值。 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中常用的機器學習函式庫,提供了各種模型和工具來處理資料和建立模型。
下面給出一個簡單的多項式迴歸實作步驟:
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類別。
# 创建数据 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函數生成因變數資料。為了使結果更真實,還添加了一些隨機雜訊。
# 使用多项式模型拟合数据 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方法來訓練模型。
# 可视化结果 plt.scatter(x, y) plt.plot(x, lin_reg.predict(poly_reg.fit_transform(x)), color='red') plt.show()
這裡使用了matplotlib函式庫來視覺化結果。透過散佈圖顯示原始數據,並在圖上繪製了多項式迴歸曲線。
三、多項式迴歸的實例
考慮一個實例:根據汽車的速度和煞車時間預測行車距離。我們使用Udacity提供的資料集來解決這個問題。資料集中包括汽車的速度、煞車時間和對應的行車距離。
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檔案中的汽車資料集。
# 提取特征和目标 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函數將資料集按比例分成訓練集和測試集。
# 训练模型 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方法來預測模型的結果。
# 计算评估指标 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中文網其他相關文章!