1. 程式人生 > >機器學習十二 誤差原因與模型複雜度

機器學習十二 誤差原因與模型複雜度

誤差原因(Error):用於測量模型效能的基本指標。

在模型預測中,模型可能出現的誤差來自兩個主要來源,即:因模型無法表示基本資料的複雜度而造成的偏差(bias),或者因模型對訓練它所用的有限資料過度敏感而造成的方差(variance)

偏差:準確率和欠擬合

如果模型具有足夠的資料,但因不夠複雜而無法捕捉基本關係,則會出現偏差。這樣一來,模型一直會系統地錯誤表示資料,從而導致準確率降低。這種現象叫做欠擬合(underfitting)

簡單來說,如果模型不適當,就會出現偏差。舉個例子:如果物件是按顏色和形狀分類的,但模型只能按顏色來區分物件和將物件分類(模型過度簡化),因而一直會錯誤地分類物件。


方差:精度和過擬合

在訓練模型時,通常使用來自較大訓練集的有限數量樣本。如果利用隨機選擇的資料子集反覆訓練模型,可以預料它的預測結果會因提供給它的具體樣本而異。在這裡,方差(variance)用來測量預測結果對於任何給定的測試樣本會出現多大的變化。

出現方差是正常的,但方差過高表明模型無法將其預測結果泛化到更多的資料。對訓練集高度敏感也稱為過擬合(overfitting),而且通常出現在模型過於複雜或我們沒有足夠的資料支援它時。

通常,可以利用更多資料進行訓練,以降低模型預測結果的方差並提高精度。如果沒有更多的資料可以用於訓練,還可以通過限制模型的複雜度來降低方差。

學習曲線與模型複雜度

學習曲線可以讓我們通過資料點來了解模型表現的好壞。

from sklearn.learning_curve import learning_curve # sklearn 0.17
from sklearn.model_selection import learning_curve # sklearn 0.18
learning_curve(
        estimator, X, y, cv=cv, n_jobs=n_jobs, train_sizes=train_sizes)
這裡estimator是我們正在用來預測的模型,例如它可以是GaussianNB(),X和y是特徵和目標。cv是交叉驗證生成器,例如KFold(),'n_jobs'是平行運算的引數,train_sizes是多少數量的訓練資料用來生成曲線。

改進模型的有效性關鍵在於通過找出正確的模型複雜度來找到最大限度降低偏差和方差的最有效點。當然,資料越多,模型隨著時間推移會變得越好。