演算法金 | 一個強大的演算法模型,多項式迴歸!!

算法金「全网同名」發表於2024-06-12


大俠幸會,在下全網同名「演算法金」 0 基礎轉 AI 上岸,多個演算法賽 Top 「日更萬日,讓更多人享受智慧樂趣」

吳恩達:機器學習的六個核心演算法!--> 線性迴歸

在許多實際場景中,簡單的線性迴歸無法捕捉複雜的模式,這時候就該祭出我們多項式迴歸大法了,一種在資料分析和預測中常用的機器學習方法。

本文的目的在於為大俠們提供多項式迴歸的基礎理解,並透過程式碼示範和資料視覺化,展示如何在實踐中應用這一技術。同時,本文將避免過多複雜的數學推導,側重於實用性和可操作性。

1. 多項式迴歸簡介

1.1 什麼是多項式迴歸

多項式迴歸是對線性迴歸的一種擴充套件,它透過新增多項式項來擬合資料中的非線性關係。其基本思想是將原始特徵擴充套件為多項式特徵,然後應用線性迴歸模型。多項式迴歸的方程形式如下:

1.2 多項式迴歸 vs 線性迴歸

線性迴歸: 線性迴歸假設目標變數和特徵變數之間存線上性關係,即:

這種方法在特徵與目標變數呈線性關係時效果很好,但在處理複雜的非線性關係時表現較差。

多項式迴歸: 多項式迴歸透過引入高次項來擬合資料的非線性關係,如上節所述。透過增加多項式的階數,可以捕捉到更多複雜的模式,但同時也增加了模型的複雜性和過擬合的風險。

1.3 多項式迴歸的適用場景

多項式迴歸適用於以下場景:

  • 資料中的非線性關係顯著,如某些時間序列預測、經濟資料分析等。
  • 需要透過模型捕捉複雜的模式和趨勢。
  • 有足夠的資料支援模型訓練,避免過擬合風險。

2. 多項式迴歸的數學公式

2.1 多項式迴歸方程

多項式迴歸的基本方程是透過線上性迴歸模型中加入多項式特徵來構建的。其一般形式為:

透過這種方式,多項式迴歸可以擬合出更加複雜的曲線,而不僅僅是直線。

2.2 關鍵引數解釋

透過對這些引數進行估計,我們可以建立一個多項式迴歸模型,用於預測和分析非線性關係。

3. 多項式迴歸的程式碼示範

3.1 資料準備與預處理

我們將建立一個包含武俠元素的資料集,模擬大俠們的武功修煉資料。假設資料集中有以下欄位:練功時間(小時),武功修煉程度(等級)。

首先,我們生成模擬資料,並視覺化資料:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 生成模擬資料
np.random.seed(42)
practice_time = np.random.uniform(1, 10, 100)
skill_level = 2 + 3 * practice_time + 1.5 * practice_time**2 + np.random.normal(0, 10, 100)

# 建立資料集
data = pd.DataFrame({
    '練功時間': practice_time,
    '武功修煉程度': skill_level
})

# 視覺化資料
plt.figure(figsize=(10, 6))
plt.scatter(data['練功時間'], data['武功修煉程度'], color='blue')
plt.xlabel('練功時間')
plt.ylabel('武功修煉程度')
plt.title('練功時間對武功修煉程度的影響')
plt.show()

在這裡,我們建立了一個包含練功時間和武功修煉程度的資料集,並透過散點圖展示了練功時間對武功修煉程度的影響。

3.2 多項式特徵生成

接下來,我們使用 PolynomialFeatures 生成多項式特徵,以便模型能夠捕捉資料中的非線性關係:

from sklearn.preprocessing import PolynomialFeatures

# 生成多項式特徵
poly = PolynomialFeatures(degree=2, include_bias=False)
poly_features = poly.fit_transform(data[['練功時間']])

# 檢視生成的多項式特徵
poly_features_df = pd.DataFrame(poly_features, columns=poly.get_feature_names_out(['練功時間']))
poly_features_df.head()

這段程式碼生成了練功時間的二次多項式特徵,並展示了生成的特徵。

3.3 模型訓練與評估

最後,我們使用生成的多項式特徵訓練線性迴歸模型,並評估其效能:

from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

# 訓練線性迴歸模型
model = LinearRegression()
model.fit(poly_features, data['武功修煉程度'])

# 預測並評估模型
predictions = model.predict(poly_features)
mse = mean_squared_error(data['武功修煉程度'], predictions)
print(f'均方誤差: {mse:.2f}')

# 為了生成平滑的擬合曲線,建立更多的資料點
practice_time_smooth = np.linspace(data['練功時間'].min(), data['練功時間'].max(), 500).reshape(-1, 1)

# 生成平滑資料點的多項式特徵
smooth_poly_features = poly.transform(practice_time_smooth)

# 使用模型進行預測
smooth_predictions = model.predict(smooth_poly_features)

# 視覺化實際值和擬合曲線
plt.figure(figsize=(10, 6))
plt.scatter(data['練功時間'], data['武功修煉程度'], color='blue', label='實際值')

# 繪製平滑的擬合曲線
plt.plot(practice_time_smooth, smooth_predictions, color='red', label='擬合曲線')
plt.xlabel('練功時間')
plt.ylabel('武功修煉程度')
plt.legend()
plt.title('多項式迴歸模型預測結果')
plt.show()

透過以上步驟,我們成功構建了一個多項式迴歸模型,並透過視覺化展示了模型的預測效果。使用單一特徵生成平滑的擬合曲線,展示了模型如何捕捉資料中的非線性關係,從而更直觀地顯示多項式迴歸的強大之處。

每天一個簡單通透的小案例,如果你對類似於這樣的文章感興趣。歡迎關注、點贊、轉發~

4. 多項式迴歸的優缺點

4.1 優點

  1. 捕捉非線性關係:多項式迴歸能夠很好地捕捉資料中的非線性關係,透過引入多項式特徵,使模型能夠擬合更加複雜的模式。
  2. 擴充套件性:在現有線性迴歸模型的基礎上,只需引入多項式特徵,就能擴充套件為多項式迴歸,具有較好的靈活性和擴充套件性。
  3. 易於理解:相比其他複雜的非線性模型(如神經網路),多項式迴歸具有較好的可解釋性,模型引數和特徵之間的關係更易於理解和解釋。

4.2 缺點

  1. 容易過擬合:多項式迴歸在引入高階多項式特徵時,容易導致模型過擬合。尤其是在樣本量較少的情況下,高階多項式可能會過度擬合訓練資料,無法很好地泛化到新資料。
  2. 特徵間的共線性問題:當特徵之間存在較高的相關性時,多項式迴歸模型可能會受到共線性問題的影響,導致模型引數估計不穩定。
  3. 計算複雜度高:隨著多項式階數的增加,模型的計算複雜度會顯著增加,尤其是在處理大規模資料集時,訓練和預測的計算時間和資源消耗較大。

5. 多項式迴歸的關聯概念

5.1 過擬合與欠擬合

過擬合: 過擬合是指模型在訓練資料上表現很好,但在新資料上的表現很差。具體到多項式迴歸,當多項式階數過高時,模型會對訓練資料中的噪聲進行擬合,從而失去對新資料的泛化能力。

欠擬合: 欠擬合是指模型在訓練資料和新資料上的表現都很差。具體到多項式迴歸,當多項式階數過低時,模型無法捕捉資料中的複雜關係,導致預測效果不佳。

5.2 正則化方法

為了解決過擬合問題,可以在多項式迴歸中引入正則化方法。常見的正則化方法有嶺迴歸(L2正則化)和Lasso迴歸(L1正則化)。

嶺迴歸: 嶺迴歸透過在損失函式中加入引數的平方和懲罰項,來限制模型引數的大小,從而防止過擬合。其損失函式如下:

其中,𝜆 是正則化引數,用於控制懲罰項的權重。

Lasso迴歸: Lasso迴歸透過在損失函式中加入引數的絕對值和懲罰項,來進行特徵選擇和防止過擬合。其損失函式如下:

其中,𝜆 是正則化引數,用於控制懲罰項的權重。

5.3 其他非線性迴歸模型(如支援向量迴歸)

除了多項式迴歸外,還有其他多種非線性迴歸模型,如支援向量迴歸(SVR)和決策樹迴歸等。

支援向量迴歸(SVR): 支援向量迴歸是一種基於支援向量機的迴歸方法,透過引入核函式,將資料對映到高維空間,從而能夠處理複雜的非線性關係。

決策樹迴歸: 決策樹迴歸是一種基於決策樹的迴歸方法,透過將資料劃分成不同的區域,並在每個區域內擬合簡單的模型,來處理資料中的非線性關係。

6. 常見誤區與注意事項

6.1 誤區一:過度擬合多項式階數

許多大俠在使用多項式迴歸時,可能會傾向於增加多項式的階數,以期獲得更好的擬合效果。然而,過高的多項式階數往往會導致模型過擬合,即在訓練資料上表現很好,但在新資料上的表現很差。為避免過擬合,應根據實際情況選擇適當的多項式階數,並使用交叉驗證等方法評估模型的泛化能力。

6.2 誤區二:忽視資料預處理

資料預處理在多項式迴歸中同樣重要。在建模之前,應對資料進行充分的清洗和處理,包括處理缺失值、異常值和特徵縮放等。這可以幫助提高模型的訓練效果和預測準確性。例如,特徵縮放可以防止在多項式特徵生成時出現數值不穩定的問題。

6.3 注意事項:選擇合適的模型評估方法

在多項式迴歸中,選擇合適的模型評估方法尤為重要。常見的評估指標包括均方誤差(MSE)、決定係數(R²)等。此外,還應使用交叉驗證等方法對模型進行評估,以全面瞭解模型的效能和泛化能力。以下是一些常見的模型評估方法:

  1. 均方誤差(MSE): 衡量模型預測值與實際值之間的平均平方誤差。MSE 越小,模型效能越好。

  1. 決定係數(R²): 衡量模型對資料的解釋能力。R² 取值範圍為 0 到 1,R² 越接近 1,模型效能越好。

  1. 交叉驗證: 將資料集劃分為若干子集,依次使用一個子集作為驗證集,其餘子集作為訓練集,計算每次驗證的效能指標,並取平均值。常見的交叉驗證方法有 k 折交叉驗證和留一法交叉驗證等。

[ 抱個拳,總個結 ]

本文介紹了多項式迴歸的基本概念和應用場景,並透過實際案例展示了多項式迴歸的強大之處。在學習和應用多項式迴歸的過程中,大俠們需要注意以下幾點:

  • 理解多項式迴歸的基本原理:多項式迴歸透過引入多項式特徵,能夠捕捉資料中的非線性關係。熟悉其基本方程和引數解釋,有助於更好地理解和應用這一技術。
  • 謹慎選擇多項式階數:避免盲目增加多項式的階數,以防止過擬合。合理選擇階數,並使用交叉驗證等方法評估模型的泛化能力,是提高模型效能的關鍵。
  • 重視資料預處理:在建模之前,對資料進行充分的清洗和處理,包括處理缺失值、異常值和特徵縮放等,可以提高模型的訓練效果和預測準確性。
  • 綜合使用模型評估方法:在評估多項式迴歸模型時,應綜合使用多種評估指標,如均方誤差(MSE)、決定係數(R²)等,並透過交叉驗證全面瞭解模型的效能和泛化能力。
  • 探索關聯概念和方法:在理解多項式迴歸的同時,大俠們可以進一步探索與其相關的概念和方法,如正則化方法(嶺迴歸、Lasso迴歸)和其他非線性迴歸模型(支援向量迴歸、決策樹迴歸)等。

每天一個簡單通透的小案例,如果你對類似於這樣的文章感興趣。歡迎關注、點贊、轉發~

- 科研為國分憂,創新與民造福 -

日更時間緊任務急,難免有疏漏之處,還請大俠海涵 內容僅供學習交流之用,部分素材來自網路,侵聯刪

[ 演算法金,碎碎念 ]

全網同名,日更萬日,讓更多人享受智慧樂趣

如果覺得內容有價值,煩請大俠多多 分享、在看、點贊,助力演算法金又猛又持久、很黃很 BL 的日更下去;

同時邀請大俠 關注、星標 演算法金,圍觀日更萬日,助你功力大增、笑傲江湖

相關文章