官术网_书友最值得收藏!

1.3 驗證和測試

利用機器學習進行預測分析或決策支持時,一個非常重要的先決條件是輸入的數據是否有代表性,這在很大程度上影響了最終結果的準確度。例如,如果我們用一部分高收入人群的消費行為來預測全國的銷售情況,毫無疑問最終的結果將會有很大的偏差。

長期以來,統計學家意識到用樣本外數據來驗證模型準確性的重要性。我們指的是,測試模型的數據應該不同于模型中用來擬合參數的數據。數據科學家把擬合參數的樣本數據稱為訓練集,將用于測試模型準確性的數據稱為測試集(通常也用到驗證集,我們將在這一節的后面進行介紹)。

我們將用一個非常簡單的例子來展示訓練集和測試集的用法。我們用美國某個地區10位從事特定職業的人的年齡來預測這部分人群的收入情況(在真實的機器學習實踐中,數據量級遠超于此)。表1-1給出了訓練數據集,圖1-1為表1-1中數據的散點分布圖。

表1-1 訓練數據集:某地區從事某一特定職業的10個隨機抽樣工資數據

圖1-1 表1-1中數據的散點分布圖

選擇一個能擬合各項數據的模型非常重要。經過一些試驗,我們可以選擇一個五次多項式建立這個模型:

在式(1-1)中,Y代表工資收入,X代表年齡。圖1-2展示了數據擬合五次多項式的結果(關于完整的數據分析結果,請參考www-2.rotman.utoronto.ca/~hull)。

從圖1-2中可見,模型對數據進行了很好的擬合,訓練集中10個樣本的模型估算工資水平與真實工資水平之間的標準偏差即均方根誤差(root mean square error,RMSE)為12 902美元。然而,為了避免模型的過度擬合(over-fit)情況(這是因為圖1-2看起來很不現實,它隨著年齡的增大一會兒下降,一會兒上升,接著又下降、又上升),我們需要用樣本外數據對其結果進行測試。用數據科學的語言來表達就是,我們需要確定模型是否很好地泛化到與表1-1不同的新數據上。

圖1-2 表1-1和圖1-1中數據擬合的五次多項式結果(具體結果請參考Excel文件:Salary vs.Age)

假設我們的測試數據集包括新增的10個樣本的工資收入數據(見表1-2),該數據的散點分布圖如圖1-3所示。當我們用圖1-2中擬合的模型時,所得出的結果中均方根誤差為38 794美元,較之前我們使用表1-1中的訓練數據集進行擬合得出的12 902美元有明顯升高。該結果證明,圖1-2中的模型存在過度擬合現象,即模型擬合結果不具有通用性。

表1-2 測試數據集:新一組的工資收入樣本數據

圖1-3 表1-2中數據的散點分布圖

在這種情況下,常規的調整步驟是尋找一個新的模型。通過對圖1-1中的散點分布進行分析,我們調整模型為二次多項式,公式為:

圖1-4展示了上述二次多項式模型對圖1-1中訓練數據集的最佳擬合結果,該擬合結果的均方根誤差為32 932美元,擬合效果不及式(1-1)。但是,該二次多項式模型與表1-2中測試數據集的擬合效果有所提升,該二次多項式項模型對測試數據集的擬合均方根誤差為33 554美元,只比訓練數據集的均方根誤差32 932美元高一點。因此,二次多項式模型可以作為更適合的模型,可替換前面用到的五次多項式模型。

在前面的例子中,相比于圖1-2而言,圖1-4所用到的模型更為簡單,并且是更為合適的模型。但我們不能武斷地得出越簡單的模型就越行之有效這一結論。例如,假設我們選用比二次多項式更簡單的模型——線性模型來進行擬合,結果如圖1-5所示。我們可以非常直觀地看到,模型沒有展現出超過50歲的人工資水平將會下降這一趨勢,在這次擬合中訓練集的均方根誤差為49 731美元,其效果遠低于二次多項式模型。

圖1-4 表1-1和圖1-1中數據擬合的二次多項式結果(詳細數據請參考Excel文件:Salary vs.Age)

圖1-5 線性模型對訓練集的擬合結果(詳細數據請參考Excel文件:Salary vs.Age)

表1-3總結了我們之前用到的三個不同模型擬合的均方根誤差的結果。其中相較五次多項式模型,線性模型和二次多項式模型的結果都比較理想,但如果從準確性來看,二次多項式模型更佳,五次多項式模型存在過度擬合的情況,而線性模型則存在欠擬合(under-fit)現象。

表1-3 不同模型擬合的均方根誤差(見Excel文件)

如何平衡過度擬合或欠擬合的情況呢?在機器學習中這是一個很重要的問題,我們將在本書后續章節中詳細討論。我們將看到,一些機器學習的算法中包含了大量的參數,所以即使我們擁有足夠大的訓練集,過度擬合的情況仍會出現。基于我們之前列舉的簡單案例,我們得出經驗法則如下:

模型的復雜性應不斷增加,直到該模型在樣本外測試的表現不佳為止。

在前面列舉的工資水平預測案例中,我們使用了兩種數據集:第一種為訓練集,用以建立模型;第二種為測試集,用以測試模型應用到樣本外數據的有效性。如果我們只需要建立一種模型并測試其對預測的有效性,那么使用上述兩種數據集即可滿足需求。然而,在實際運用中,我們往往需要建立一系列的模型來對比它們的預測效果(在工資預測的例子中,我們也有所涉及)。所以,我們通常會將數據分為以下三組:

·訓練集;

·驗證集;

·測試集。

訓練集一般用于開發備選模型。驗證集用于觀測模型對于數據的擬合情況,從而選出較好的模型。在選取較好的模型之后,測試集則被用來對所選中模型的精確性進行樣本外測試。在常規的做法中:將數據的60%作為訓練集,30%作為驗證集,10%作為測試集。當然,我們可根據選取模型的類型和數據量進行靈活分配。

最后需要聲明一下,在本小節中我們列舉的例子并不是真實的機器學習案例,因為樣本量太少(利用10個觀測值顯然并不足以可靠地去研究學習兩個變量之間的關系)。我們的目的僅僅是希望通過這個簡單的例子向各位讀者介紹過度擬合和欠擬合的具體含義。

主站蜘蛛池模板: 哈巴河县| 昭觉县| 芮城县| 都昌县| 常熟市| 广灵县| 延安市| 崇左市| 永安市| 顺义区| 凤山县| 四子王旗| 阿图什市| 泸西县| 新余市| 白玉县| 石柱| 西峡县| 巴楚县| 兰西县| 武胜县| 长汀县| 来安县| 大荔县| 海南省| 尼木县| 平乡县| 桦川县| 封丘县| 仁化县| 甘谷县| 乌拉特中旗| 抚州市| 威海市| 松溪县| 宁国市| 峨边| 九龙县| 旌德县| 富平县| 唐河县|