機器學習模型中,偏差與方差的權衡及計算

2021-10-24 18:03:30 字數 4487 閱讀 4257

衡量乙個機器學習模型的效能,可以用偏差和方差作為依據。

乙個高偏差的模型,總是會對資料分布做出強假設,比如線性回歸。而乙個高方差的模型,總是會過度依賴於它的訓練集,例如未修剪的決策樹。我們希望乙個模型的偏差和方差都很低,但更多情況下我們需要在二者之間做出權衡。

在選擇和調整模型時,「偏差-方差權衡」是乙個非常有用的概念。當然它在一般情況下是無法直接計算的,因為這需要這一問題領域內的全部知識,而我們並不具備。儘管如此,我們可以評估出乙個模型的誤差,並將其拆分成偏差和方差兩部分,從而藉此了解該模型的執行方式。

……………………………………………

機器學習模型是用來做**任務的,例如回歸或分類。

乙個模型**效能可以用對未參與訓練的樣本做**後的誤差來表示,我們將其視作是模型誤差。

誤差(模型):

模型誤差可以被分解為三個部分:模型的方差、模型的偏差以及不可約誤差的方差。

誤差(模型):

誤差(模型)= 方差(模型)+ 偏差(模型)+ 方差(不可約誤差)

讓我們仔細看看這三個術語。

偏差用於衡量乙個模型擬合的輸入和輸出之間關係與真實情況的近似程度。

這能獲得模型的剛度:模型對於輸入和輸出之間的函式的假設強度。

「這能夠反映出模型的擬合結果與真實規律之間的差距。」 ——《**模型應用》2023年版,97頁

當偏差符合未知的真實規律時,我們可以接受具有高偏差的**模型。但是,當真實資料函式形式與模型的假設完全不匹配時,例如對乙個高度非線性關係的資料使用線性關係的假設,具備過高偏差的模型是毫無用處的。

偏差一定是正值。

模型的方差是模型在擬合不同的訓練資料時效能的變化大小。它反映特定資料對模型的影響。

「方差指的是,用不同訓練資料進行模型評估時,模型表現的變化程度。」 ——《統計學習及其在r中的應用》2023年版,第34頁

乙個高方差的模型在訓練資料集發生細小變化時**結果會發生很大變化。相反,對於低方差的模型,訓練資料發生或大或小的改變時,**結果的變化都很小。

方差一定是正值。

整體而言,模型的誤差包含可約誤差和不可約誤差。

模型誤差 = 可約誤差 + 不可約誤差

可約誤差是我們可以去優化的成分。在模型通過學習訓練集後這一數值會下降,我們會努力讓這一數值盡可能地接近於零。

不可約誤差是我們無法從模型中剔除的誤差,在任何模型中都不可能被去除。

這一誤差源於不可控因素,例如觀測中的統計雜訊。

「……通常會稱之為「不可約雜訊」,且不能在建模過程中剔除。」 ——《**模型應用》2023年版,第97頁

同樣的,儘管我們能夠把可約誤差壓縮到接近於零或者非常小的值,甚至有時能夠等於零,但不可約誤差依然會存在。這決定了模型效能的下限。

「有一點是我們是需要牢牢記住的,那就是不可約誤差始終會作為我們對目標y**精確率的下限值,這個邊界在實踐中永遠是未知的。」 ——《統計學習及其在r中的應用》2023年版,第19頁

這提醒我們任何模型都不是完美的。

對於模型的表現來說,偏差和方差是有關聯的。

理想情況下,我們希望乙個模型能有低偏差和低方差,但是在實際操作中這是非常具有挑戰性的。實際上這是機器學習建模的目標。

降低偏差很容易使方差公升高。相反,降低方差也會使得偏差公升高。

「這被稱之為一種『權衡』,因為一般的方法很容易得到極低的偏差和很高的方差……或很低的方差和很高的偏差……」

——《統計學習及其在r中的應用》2023年版,第36頁

這種關係一般被稱為「偏差與方差的權衡」。這是乙個關於思考如何選擇模型和調整模型的概念框架。

我們可以基於偏差和方差來選擇模型。簡單的模型,例如線性回歸和邏輯回歸,通常具有高偏差和低方差。而複雜的模型,例如隨機森林,通常具有低偏差和高方差。

我們通常會基於模型的偏差和方差所造成的影響來調整模型。對於k-近鄰演算法來說,超引數k控制著模型的偏差-方差權衡。k取值較小,例如k=1,會得到低偏差高方差的結果。反之k取值較大,如k=21,導致高偏差和低方差。

高偏差和高方差都不一定是壞的,但他們有可能會導致不良的結果。

我們時常要對一組不同的模型和模型引數進行測試,從而在給定的資料集中得到最好的結果。乙個高偏差的模型有可能會是過於保守的,出現欠擬合。相反的,乙個高方差的模型可能會出現過擬合。

我們有可能會選擇提高偏差或方差,來減少模型的整體誤差。

我經常會遇到這樣的問題:

「如何能量化我的演算法在資料集上所得到的偏差-方差權衡呢?」

從技術的角度講,我們無法進行這樣的計算。

我們無法針對乙個**建模問題來計算實際的偏差和方差。因為我們並不知道真實的對映函式。

但是我們可以將偏差、方差、不可約誤差和偏差-方差權衡作為幫助我們選擇模型、調整模型和解釋結果的工具。

「在實際情況中,f是無法被觀察到的,所以一般對於統計學習方法來說無法明確計算mse值、偏差、方差。雖然如此,我們必須要關注偏差-方差權衡。」

——《統計學習及其在r中的應用》2014版,第36頁

雖然偏差-方差權衡是乙個概念上的工具,某些情況下我們也可以進行估計。

sebastian raschka建立的mlxtend庫提供了bias_variance_decomp()函式,可以對乙個模型採用多重自取樣(multiple bootstrap samples)的方式來評估偏差和方差。

首先,你需要安裝mlxtend庫,例如:

sudo  pip install mlxtend
下面這個例子是直接通過url載入波士頓房價資料集,劃分為訓練集和測試集,然後估計出對於線性回歸的均方根誤差(mse),以及採用200次自取樣所獲得的偏差和方差模型誤差。

#estimate the bias and variance for a regression model

frompandas import read_csv

fromsklearn.model_selection import train_test_split

fromsklearn.linear_model import linearregression

frommlxtend.evaluate import bias_variance_decomp

#load dataset

url =

''dataframe= read_csv(url, header=

none

)#separate into inputs and outputs

data= dataframe.values

x, y= data[:,

:-1]

, data[:,

-1]#split the data

x_train,x_test, y_train, y_test = train_test_split(x, y, test_size=

0.33

,random_state=1)

#define the model

model= linearregression(

)#estimate bias and variance

mse,bias, var = bias_variance_decomp(model, x_train, y_train, x_test, y_test,loss=

'mse'

, num_rounds=

200, random_seed=1)

#summarize results

print

('mse:%.3f'

% mse)

print

('bias:%.3f'

% bias)

print

('variance:%.3f'

% var)

執行上述**,記錄估計出的誤差和模型的偏差和方差。

注意:考慮到演算法或評估過程的自然隨機性或者是數值精度的不同,你的結果有可能會存在很大的差異。你可以考慮把這段**反覆執行幾次,比較結果的平均值。

本例中,我們可以看到這個模型具有高偏差和低方差。這是預料之中的,因為我們用的是線性回歸模型。我們還可以看到估計平均值加上方差等於模型的評估誤差,即20.726+1.1761=22.487。

mse:

22.487

bias:

20.726

variance:

1.761

進一步了解:

- 教程

機器學習中的偏差-方差權衡

- 書籍

《統計學習及其在r中的應用》,2014版

《**模型應用》,2013版

- 文章

偏差-方差權衡,維基百科

偏差方差分解,mlxtend庫

理解機器學習中的偏差與方差

學習演算法的 誤差,或者說泛化誤差 generalization error 可以分解為三個部分 偏差 bias 方差 variance 和雜訊 noise 在估計學習演算法效能的過程中,我們主要關注偏差與方差.因為雜訊屬於不可約減的誤差 irreducible error 首先拋開機器學習的範疇,...

模型的方差與偏差

泛化誤差可以分為三個部分,偏差 bias 方差 variance 和雜訊 noise 其中可控的是偏差 bias 方差 variance 偏差 bias,指的是模型 值偏離真實值的程度 方差 variance,值模型 值的離散程度,比如兩條幾乎相同的樣本,但是 值可能差很多 bias 和varian...

機器學習基礎 偏差與方差

在有監督學習中,通過訓練資料得到的模型,需要考察其泛化能力,通常用泛化誤差來衡量模型泛化能力的高低。也可以用測試誤差來衡量模型泛化能力,不過測試的樣本是有限的 而且難以保證不是有偏的 基於大數定律,假設每次參與模型訓練的樣本都是獨立同分布的 實際有點難,會有樣本重疊 那麼從多個訓練樣本中得到的經驗誤...