机器学习模型评估方法(一)
機器學習中,將數據集劃分為訓練集、驗證集、測試集。訓練集構建模型,然后用模型計算測試數據集的測試誤差,最后以測試集的測試誤差近似為模型的泛化能力,根據泛化能力來評估模型的優劣。
本文首先引入數據集概率分布的概念,然后介紹模型評估方法。
1. 數據集的概率分布
總體樣本服從某一分布P(X),數據集D是從總體樣本中獨立隨機抽樣m次獲取的,數據集D = {(x1, y1), (x2, y2), (x3, y3),...(xm, ym)}.
D的概率分布:
P(D) = P(x1)*P(x2)*P(x3)...*p(xm)
若再次從總體樣本中隨機抽樣m次得到數據集D1,數據集D1 = {(x1', y1), (x2', y2),(x3', y3)...(xm', ym)},若數據集不同,那么數據集構建的最優模型也不同。
2. 模型評估方法
模型評估方法是數據集劃分訓練集和測試集的方法。常用的方法有留出法、交叉驗證法、自助法。
2.1 留出法
“留出法”(hold-out)將數據集D劃分為兩個互斥的集合,其中一個集合為訓練集S,另一個作為測試集T,即
D = SυT,S∩T = Φ
訓練集S具體劃分為訓練集和驗證集,訓練集模型構建模型,驗證集對該模型進行參數擇優,選擇最優模型,測試集T測試最優模型的泛化能力。
訓練集和測試集的劃分要盡可能保持數據分布的一致性,避免因數據劃分過程引入額外的偏差而對最終結果產生影響。如數據集D包含500個正樣本,500個負樣本,數據集D劃分為70%樣本的訓練集和30%樣本的測試集,為了保證訓練和測試正負樣本比例與數據D比例相同,采用分層抽樣的方法,先從500個正樣本隨機抽取350次,500個負樣本隨機抽取350次,然后剩下的樣本作為測試集,分層抽樣保證訓練集的正負樣本的比例與數據集D的正負樣本比例相同。
留出法的另一個問題是訓練集S和測試集T是從數據集D隨機抽樣得到的,因此偶然性較大,需要多次進行留出法計算每次的測試誤差率,然后對每次的測試誤差求平均(如下圖),減小偶然因素。
圖1、 平均留出法
初始數據集D的概率分布:
P(D) = P(S1)*P(T1)
第一次留出法抽樣的訓練集的概率分布:P(S1)
留出法的訓練集只包含了一定比例的初始數據集,留出法訓練數據集S1和初始數據集D的概率分布不一樣,因此用留出法估計的模型存在估計偏差。
2.2 交叉驗證法
“交叉驗證法”(cross validation)先將數據集D劃分為k個大小相似的互斥子集
D = D1 υ D2 υ D3...υ Dk,Di∩Dj = Φ(i ≠ j)
每個子集Di通過分層采樣得到(如上所述,為了保證正負樣本的比例與數據集D的比例相同),然后用k-1個子集的并集作為訓練集,余下的子集作為測試集;這樣就獲得k組訓練/測試集,從而進行k次訓練和測試,最終返回的是這k個測試結果的均值。通常把交叉驗證法稱為“K折交叉驗證法”,k最常用的取值是10,此時稱為10折交叉驗證。下圖為10折交叉驗證的示意圖。
圖2、10折交叉驗證示意圖
初始數據集的概率分布:
P(D) = p(D1)*P(D2)*P(D3)*...*P(D9)*P(D10)
十折交叉驗證的第一折的訓練集的概率分布:
P(D') = P(D1)*P(D2)*P(D3)*...*P(D9)
十折交叉驗證的訓練集只包含初始數據集的90%,訓練數據集D'和初始數據集D的概率分布不一樣,因此用十折交叉驗證估計的模型存在估計偏差。
若數據集D包含m個樣本,先將數據集D劃分為m個大小相似的子集,每個子集只有一個樣本數據,則得到了交叉驗證法的一個特例,留一法(Leave-One-Out,簡稱LOO)。因為留一法的訓練數據集相比原始樣本數據集D只少了一個樣本,因此留一法的評估結果比較準確。但留一法在訓練訓練數據比較大時,訓練m個模型的計算開銷可能是難以忍受的(例如數據集包含1百萬個樣本,則需要訓練1百萬個模型),若考慮模型參數優化的情況下,計算量則會成倍增加。
2.3 自助法
我們希望評估的是用原始數據集D訓練出的模型,但是留出法和交叉驗證法訓練的數據集比原始的數據集D小,這必然會引入因訓練數據集不同導致的估計偏差,留一法受訓練樣本規模變化的影響較小,但是計算復雜度太高。
“自助法”(bootstrapping)是放回抽樣,給定包含m個樣本的數據集D,我們對它進行采樣產生數據集D':每次隨機從D中挑選一個樣本,將該樣本拷貝放入D',然后再將該樣本放回初始數據集D中,下次抽樣時仍有可能被采到;重復執行m次該過程,我們就得到包含m個樣本數據集D',這就是自主采樣的結果。初始數據集D中有一部分樣本會在數據集D'中多次出現,也有一部分樣本不會在數據集D'中出現。
樣本在m次采樣中始終不被采到的概率是:
P(一次都未被采集) = (1-1/m)m
對m取極限得到:
上式可知,通過自助采樣,初始數據集D中約有36.8%的樣本未出現在采集數據集D',于是我們可將D'用作訓練集,實際評估的模型與期望評估的模型都使用m個訓練樣本,我們仍有數據總量約1/3的,沒在訓練集中出現的樣本作為測試集用于測試,這樣的測試結果,亦稱“外包估計”。
自助法在數據集較小,難以有效劃分訓練/測試集時很有用;此外,自助法能從初始數據集中產生多個不同的訓練集,這對集成學習(強學習分類器)等方法有很大的好處,然而,自助法產生數據集改變了初始數據集的分布,這會引入估計偏差。
數據集D分為D1,D2,D3,D4數據集,假設知道自助采樣的數據集結果,比較自助法采樣產生的數據集分布和初始數據集的分布。
初始數據集D的概率分布:
P(D) = P(D1)*P(D2)*P(D3)*P(D4)
第一次自助采樣D1'的概率分布:
P(D1') = P(D1)*P(D1)*P(D2)*P(D2)
第二次自助采樣D2'的概率分布:
P(D2') = P(D2)*P(D3)*P(D3)*P(D4)
由上述表達式可知道,初始數據集與自助采樣數據集D1'、自助采樣數據集D2'的概率分布不一樣,且自助法采樣的數據集正負類別比例與原始數據集不同,因此用自助法采樣的數據集代替初始數據集來構建模型存在估計偏差。
3. 討論
本文討論了三種機器學習模型評估方法;留出法、交叉驗證法和自助法。留出法和交叉驗證法雖然通過分層抽樣的方法沒有改變初始數據集正負類比的比例,但是訓練數據集的樣本數少于原始數據集,訓練數據集的概率分布與原始數據集的概率分布不一樣,因此留出法和交叉驗證法在構建模型時存在估計偏差;自助法雖然樣本容量和初始數據集一樣,但是改變了初始數據集的分布和正負類別比例,用自助法抽樣的數據集分布來代替初始數據集的分布,同樣存在估計偏差。
因此,若對于小樣本的數據集,個人建議采用自助法抽樣的方法,然后用強訓練分類器構建模型;若對于大一點的樣本數據集則建議采用十折交叉驗證法,超大樣本數據及則建議采用留出法構建模型。
總結
以上是生活随笔為你收集整理的机器学习模型评估方法(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 巧用c语言的位运算代替部分求余%计算
- 下一篇: 武汉小吃街在哪里 探寻武汉美食文化中心?