python 方差分解_干货 :教你用Python来计算偏差-方差权衡
原標題:干貨 :教你用Python來計算偏差-方差權衡
作者:Jason Brownlee 翻譯:吳振東
本文約3800字,建議閱讀8分鐘。
本文為你講解模型偏差、方差和偏差-方差權衡的定義及聯系,并教你用Python來計算。
衡量一個機器學習模型的性能,可以用偏差和方差作為依據。
一個高偏差的模型,總是會對數據分布做出強假設,比如線性回歸。而一個高方差的模型,總是會過度依賴于它的訓練集,例如未修剪的決策樹。我們希望一個模型的偏差和方差都很低,但更多情況下我們需要在二者之間做出權衡。
在選擇和調整模型時,“偏差-方差權衡”是一個非常有用的概念。當然它在一般情況下是無法直接計算的,因為這需要這一問題領域內的全部知識,而我們并不具備。盡管如此,我們可以評估出一個模型的誤差,并將其拆分成偏差和方差兩部分,從而借此了解該模型的運行方式。
在這篇教程中,你將了解如何計算一個機器學習模型的偏差和方差。
在完成這篇教程后,你將會學到:
模型誤差包含模型方差、模型偏差以及不可約誤差;
我們希望模型具有低偏差和低方差,但是一般情況下一個值的縮小會導致另一個值的增大;
如何將均方誤差分解成模型的偏差和方差。
我的新書《用Python掌握機器學習》(https://machinelearningmastery.com/machine-learning-with-python/)將幫助你開始新的項目,其中包括分步教程和所有示例的Python源代碼文件。
讓我們開始吧。
教程綜述
本篇教程可以分為三部分,分別是:
偏差、方差和不可約誤差;
偏差-方差權衡;
計算偏差和方差。
偏差、方差和不可約誤差
機器學習模型是用來做預測任務的,例如回歸或分類。
一個模型預測性能可以用對未參與訓練的樣本做預測后的誤差來表示,我們將其視作是模型誤差。
誤差(模型)
模型誤差可以被分解為三個部分:模型的方差、模型的偏差以及不可約誤差的方差。
誤差(模型)= 方差(模型)+ 偏差(模型)+ 方差(不可約誤差)
讓我們仔細看看這三個術語。
模型偏差
偏差用于衡量一個模型擬合的輸入和輸出之間關系與真實情況的近似程度。
這能獲得模型的剛度:模型對于輸入和輸出之間的函數的假設強度。
“這能夠反映出模型的擬合結果與真實規律之間的差距。”
——《預測模型應用》2013年版,97頁
當偏差符合未知的真實規律時,我們可以接受具有高偏差的預測模型。但是,當真實數據函數形式與模型的假設完全不匹配時,例如對一個高度非線性關系的數據使用線性關系的假設,具備過高偏差的模型是毫無用處的。
低偏差:關于對輸入到輸出映射函數形式的弱假設。
高偏差:關于對輸入到輸出映射函數形式的強假設。
偏差一定是正值。
模型方差
模型的方差是模型在擬合不同的訓練數據時性能的變化大小。它反映特定數據對模型的影響。
“方差指的是,用不同訓練數據進行模型評估時,模型表現的變化程度。”
——《統計學習及其在R中的應用》2014年版,第34頁
一個高方差的模型在訓練數據集發生細小變化時預測結果會發生很大變化。相反,對于低方差的模型,訓練數據發生或大或小的改變時,預測結果的變化都很小。
低方差:訓練數據集的變化對于模型來說影響很小。
高方差:訓練數據集的變化對于模型來說影響很大。
方差一定是正值。
不可約誤差
整體而言,模型的誤差包含可約誤差和不可約誤差。
模型誤差 = 可約誤差 + 不可約誤差
可約誤差是我們可以去優化的成分。在模型通過學習訓練集后這一數值會下降,我們會努力讓這一數值盡可能地接近于零。
不可約誤差是我們無法從模型中剔除的誤差,在任何模型中都不可能被去除。
這一誤差源于不可控因素,例如觀測中的統計噪聲。
“……通常會稱之為“不可約噪聲”,且不能在建模過程中剔除。”
——《預測模型應用》2013年版,第97頁
同樣的,盡管我們能夠把可約誤差壓縮到接近于零或者非常小的值,甚至有時能夠等于零,但不可約誤差依然會存在。這決定了模型性能的下限。
“有一點是我們是需要牢牢記住的,那就是不可約誤差始終會作為我們對目標Y預測精確率的下限值,這個邊界在實踐中永遠是未知的。”
——《統計學習及其在R中的應用》2014年版,第19頁
這提醒我們任何模型都不是完美的。
偏差-方差的權衡
對于模型的表現來說,偏差和方差是有關聯的。
理想情況下,我們希望一個模型能有低偏差和低方差,但是在實際操作中這是非常具有挑戰性的。實際上這是機器學習建模的目標。
降低偏差很容易使方差升高。相反,降低方差也會使得偏差升高。
“這被稱之為一種‘權衡’,因為一般的方法很容易得到極低的偏差和很高的方差……或很低的方差和很高的偏差……”
——《統計學習及其在R中的應用》2014年版,第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 ='https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.csv'
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
深入了解
如果您想進一步了解,本節將提供更多有關該主題的資源。
教程
機器學習中的偏差-方差權衡:
https://machinelearningmastery.com/gentle-introduction-to-the-bias-variance-trade-off-in-machine-learning/
書籍
《統計學習及其在R中的應用》,2014版:
https://amzn.to/2RC7ElX
《預測模型應用》,2013版:
https://amzn.to/3a7Yzrc
文章
偏差-方差權衡,維基百科:
https://en.wikipedia.org/wiki/Bias%E2%80%93variance_tradeoff
偏差方差分解,MLxtend庫:
http://rasbt.github.io/mlxtend/user_guide/evaluate/bias_variance_decomp/
總結
在這篇教程中,你掌握了如何計算一個機器學習模型的偏差和方差。
具體而言,你學到了:
模型誤差包含模型方差、模型偏差以及不可約誤差。
我們尋求具有低偏差和低方差的模型,但是一般情況下一個值的縮小會導致另一個值的增大。
如何將均方誤差分解成模型的偏差和方差。
原文標題:
How to Calculate the Bias-Variance Trade-off with Python
原文鏈接:
https://machinelearningmastery.com/calculate-the-bias-variance-trade-off/
譯者簡介:吳振東,法國洛林大學計算機與決策專業碩士。現從事人工智能和大數據相關工作,以成為數據科學家為終生奮斗目標。來自山東濟南,不會開挖掘機,但寫得了Java、Python和PPT。
轉自: 數據派THU 公眾號;轉載請注明原文鏈接和作者,如有侵權或出處有誤請和我們聯系。返回搜狐,查看更多
責任編輯:
總結
以上是生活随笔為你收集整理的python 方差分解_干货 :教你用Python来计算偏差-方差权衡的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Php 哈夫曼 压缩图片,快速Huffm
- 下一篇: 武汉理工大学桂林老师java_武汉理工大