機器學習中的偏差和方差



偏差和方差是機器學習中兩個重要的概念,它們描述了模型預測中誤差的來源。**偏差**指的是由於過度簡化輸入特徵和輸出變數之間底層關係而導致的誤差。同時,**方差**指的是由於對訓練資料中的波動過於敏感而導致的誤差。

在機器學習中,我們努力**最小化偏差和方差**,以便構建一個能夠準確預測未見資料的模型。高偏差模型可能過於簡單,無法擬合訓練資料。相反,方差高的模型可能會過擬合訓練資料,無法推廣到新資料。

通常,一個機器學習模型會顯示三種類型的誤差——偏差、方差和不可減少誤差。偏差和方差誤差之間存在權衡。減少偏差會導致方差增加,反之亦然。

什麼是偏差?

偏差計算為平均預測值與實際值之間的差值。在機器學習中,偏差(系統誤差)發生在模型對資料做出錯誤假設時。

高偏差模型既不匹配訓練資料也不匹配測試資料。這會導致訓練和測試資料中的誤差很高。

而低偏差模型很好地匹配訓練資料(高訓練準確率或訓練誤差較小)。它導致訓練資料中的誤差較低,但測試資料中的誤差較高。

偏差型別

  • **高偏差** - 高偏差是由於機器學習模型中的錯誤假設造成的。高偏差模型無法捕捉訓練資料中隱藏的模式。這會導致**欠擬合**。這會導致**欠擬合**。高偏差的特點是模型高度簡化、欠擬合以及訓練和測試資料中較高的誤差。
  • **低偏差** - 低偏差模型能夠捕捉訓練資料中隱藏的模式。低偏差會導致高方差,最終導致過擬合。低偏差通常是由於ML模型過於複雜造成的。

下圖顯示了高偏差和低偏差誤差的圖形表示。

Graphical Representation of Bias

模型中偏差的示例

一個試圖擬合非線性資料的線性迴歸模型將顯示高偏差。一些高偏差模型的示例包括線性迴歸和邏輯迴歸。一些低偏差模型的示例包括決策樹、K近鄰和支援向量機。

偏差對模型效能的影響

高偏差會導致訓練和測試資料集上的效能低下。高偏差模型將無法推廣到新的、未見的資料。

什麼是方差?

方差是衡量給定觀測集中數字相對於平均值的離散程度或分散程度的指標。它基本上衡量了一組數字相對於平均值的離散程度。在統計學和機率論中,方差被定義為隨機變數與其樣本均值偏差平方的期望值。

在機器學習中,方差是模型在不同資料集上的預測變化。方差顯示了當資料略有變化時,模型預測的變化程度。如果模型在訓練和測試資料上的準確率差異很大,則該模型具有高方差。

高方差模型甚至可以擬合訓練資料中的噪聲,但缺乏對新的、未見資料的泛化能力。

方差型別

  • **高方差** - 高方差模型捕獲噪聲以及隱藏模式。這會導致**過擬合**。高方差模型顯示出高訓練準確率,但測試準確率低。高方差模型的一些特徵包括模型過於複雜、過擬合、訓練資料誤差低以及測試資料誤差高。
  • **低方差** - 低方差模型無法捕獲資料中隱藏的模式。當我們擁有非常少的資料或使用非常簡單的模型時,可能會出現低方差。低方差會導致**欠擬合**。

下圖顯示了高方差和低方差示例的圖形表示。

Graphical Representation of Variance

模型中方差的示例

一個具有許多分支的決策樹,它完美地擬合訓練資料,但沒有正確地擬合測試資料,就是一個高方差的例子。高方差的例子:K近鄰、決策樹和支援向量機 (SVM)。

方差對模型效能的影響

高方差會導致模型在訓練資料上表現良好,但在訓練資料上表現不佳。在訓練過程中,高方差模型對訓練資料擬合得非常好,甚至將噪聲作為實際模式捕獲。具有高方差誤差的模型被稱為**過擬合**模型。

偏差-方差權衡

偏差-方差權衡是在由偏差引入的誤差和由方差引入的誤差之間找到平衡。隨著模型複雜度的增加,偏差會降低,但方差會增加。但是,當我們降低模型複雜度時,偏差會增加,方差會降低。因此,我們需要在偏差和方差之間找到平衡,以便最小化總預測誤差。

如果機器學習模型在訓練中存在高偏差或高方差,則它在新的、未見的資料上將無法很好地執行。一個好的模型不應該同時具有高偏差或高方差。我們不能同時降低偏差和方差。當偏差降低時,方差會增加。因此,我們需要找到最佳的偏差和方差,以便使預測誤差最小化。

在機器學習中,偏差-方差權衡非常重要,因為具有高偏差或高的模型。

圖形表示

下圖以圖形方式表示了偏差和方差之間的權衡。

ML Bias-Variance Tradeoff

在上圖中,X 軸表示模型複雜度,Y 軸表示預測誤差。總誤差是偏差誤差和方差誤差的總和。最佳區域顯示了偏差和方差之間平衡的區域,展示了具有最小誤差的最佳模型複雜度。

數學表示

機器學習模型中的預測誤差可以用數學方式表示如下:

誤差 = 偏差2 + 方差 + 不可減少誤差。

為了最小化模型預測誤差,我們需要選擇模型複雜度,以便在這兩種誤差之間達到平衡。

偏差-方差權衡的主要目標是找到最小化誤差的偏差和方差(模型複雜度)的最佳值。

平衡偏差和方差的技術

有不同的技術可以平衡偏差和方差以實現最佳預測誤差。

1. 減少高偏差

  • 選擇更復雜的模型 - 正如我們在上圖中看到的,選擇更復雜的模型可以減少模型預測的偏差誤差。
  • 新增更多特徵 - 新增更多特徵可以增加模型的複雜性,從而更好地捕捉隱藏模式,從而減少模型的偏差誤差。
  • 減少正則化 - 正則化可以防止過擬合,但在減少方差的同時,它也可能增加偏差。因此,減少正則化引數或完全去除正則化可以減少偏差誤差。

2. 減少高方差

  • 應用正則化技術 - 正則化技術會對複雜模型新增懲罰,最終導致模型複雜度降低。較不復雜的模型將顯示較小的方差。
  • 簡化模型複雜度 - 較不復雜的模型將具有較低的方差。您可以透過使用更簡單的演算法來減少方差。
  • 新增更多資料 - 向資料集中新增更多資料可以幫助模型更好地執行,從而顯示出較小的方差。
  • 交叉驗證 - 交叉驗證可用於透過比較資料集的訓練集和驗證集上的效能來識別過擬合。

使用 Python 的偏差和方差示例

讓我們使用 Python 程式語言實現一些實際示例。我們在這裡提供了四個示例。前三個示例顯示了某種程度的高/低偏差或方差。第四個示例顯示了偏差和方差的最佳值。

高偏差示例

以下是 Python 中的實現示例,說明如何使用波士頓房價資料集分析偏差和方差:

import numpy as np
import pandas as pd
from sklearn.datasets import load_boston

boston = load_boston()
X = boston.data
y = boston.target
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=42)
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

lr = LinearRegression()
lr.fit(X_train, y_train)

train_preds = lr.predict(X_train)
train_mse = mean_squared_error(y_train, train_preds)
print("Training MSE:", train_mse)

test_preds = lr.predict(X_test)
test_mse = mean_squared_error(y_test, test_preds)
print("Testing MSE:", test_mse)

輸出

輸出顯示了線性迴歸模型的訓練和測試均方誤差 (MSE)。訓練 MSE 為 21.64,測試 MSE 為 24.29,表明模型具有高偏差和中等方差。

Training MSE: 21.641412753226312
Testing MSE: 24.291119474973456

低偏差和高方差示例

讓我們嘗試一個多項式迴歸模型:

from sklearn.preprocessing import PolynomialFeatures

poly = PolynomialFeatures(degree=2)
X_train_poly = poly.fit_transform(X_train)
X_test_poly = poly.transform(X_test)

pr = LinearRegression()
pr.fit(X_train_poly, y_train)

train_preds = pr.predict(X_train_poly)
train_mse = mean_squared_error(y_train, train_preds)
print("Training MSE:", train_mse)

test_preds = pr.predict(X_test_poly)
test_mse = mean_squared_error(y_test, test_preds)
print("Testing MSE:", test_mse)

輸出

輸出顯示了度數為 2 的多項式迴歸模型的訓練和測試 MSE。訓練 MSE 為 5.31,測試 MSE 為 14.18,表明與線性迴歸模型相比,該模型具有較低的偏差但較高的方差。

Training MSE: 5.31446956670908
Testing MSE: 14.183558207567042

低方差示例

為了減少方差,我們可以使用正則化技術,例如嶺迴歸套索迴歸。在下面的示例中,我們將使用嶺迴歸:

from sklearn.linear_model import Ridge

ridge = Ridge(alpha=1)
ridge.fit(X_train_poly, y_train)

train_preds = ridge.predict(X_train_poly)
train_mse = mean_squared_error(y_train, train_preds)
print("Training MSE:", train_mse)

test_preds = ridge.predict(X_test_poly)
test_mse = mean_squared_error(y_test, test_preds)
print("Testing MSE:", test_mse)

輸出

輸出顯示了 alpha=1 的嶺迴歸模型的訓練和測試 MSE。與多項式迴歸模型相比,訓練 MSE 為 9.03,測試 MSE 為 13.88,表明該模型具有較低的方差但略高的偏差。

Training MSE: 9.03220937860839
Testing MSE: 13.882093755326755

最佳偏差和方差示例

我們可以進一步調整超引數 alpha 以找到偏差和方差之間的最佳平衡。讓我們看一個例子:

from sklearn.model_selection import GridSearchCV

param_grid = {'alpha': np.logspace(-3, 3, 7)}
ridge_cv = GridSearchCV(Ridge(), param_grid, cv=5)
ridge_cv.fit(X_train_poly, y_train)

train_preds = ridge_cv.predict(X_train_poly)
train_mse = mean_squared_error(y_train, train_preds)
print("Training MSE:", train_mse)

test_preds = ridge_cv.predict(X_test_poly)
test_mse = mean_squared_error(y_test, test_preds)
print("Testing MSE:", test_mse)

輸出

輸出顯示了具有最佳 alpha 值的嶺迴歸模型的訓練和測試 MSE。

Training MSE: 8.326082686584716
Testing MSE: 12.873907256619141

訓練 MSE 為 8.32,測試 MSE 為 12.87,表明該模型在偏差和方差之間取得了良好的平衡。

廣告