原文地址: 在處理機器學(xué)習(xí)等數(shù)據(jù)科學(xué)問題時,經(jīng)常會碰到不均衡種類分布的情況,即在樣本數(shù)據(jù)中一個或多個種類的觀察值明顯少于其他種類的觀察值的現(xiàn)象。在我們更關(guān)心少數(shù)類的問題時這個現(xiàn)象會非常突出,例如竊電問題、銀行詐騙性交易、罕見病鑒定等。在這種情況下,運用常規(guī)的機器學(xué)習(xí)算法的預(yù)測模型可能會無法準確預(yù)測。這是因為機器學(xué)習(xí)算法通常是通過減少錯誤來增加準確性,而不考慮種類的平衡。這篇文章講了不同的方法來解決這個不均衡分類問題,同時說明了這些方法的好處和壞處。 不均衡數(shù)據(jù)集一般是指少數(shù)類所占比例少于5%的數(shù)據(jù)集,少數(shù)類通常是指稀有事件的發(fā)生。例如在一個公共欺詐檢測數(shù)據(jù)集中,有如下數(shù)據(jù): 總觀測數(shù)據(jù) = 1000 欺詐的觀測數(shù)據(jù) = 20 非欺詐的觀測數(shù)據(jù) = 980 事件發(fā)生率 = 2% 在分析這個數(shù)據(jù)集時最主要的問題是,如何通過合適的稀有事件的樣本數(shù)目得到一個平衡的數(shù)據(jù)集? 傳統(tǒng)的模型評估方法不能準確的評價不均衡數(shù)據(jù)集訓(xùn)練的模型的表現(xiàn)。顯然,模型趨向于預(yù)測多數(shù)集,少數(shù)集可能會被當(dāng)作噪點或被忽視。因此,相比于多數(shù)集,少數(shù)集被錯分的可能性很大。當(dāng)使用一個不均衡數(shù)據(jù)集訓(xùn)練模型時,準確率并不是一個合適的評價方式。假如一個分類器可以達到98%的準確率,我們會認為這個模型表現(xiàn)很好,而對于一個少數(shù)集占總體2%的數(shù)據(jù)集來說,如果分類器把全部都預(yù)測為多數(shù)集,準確率就能達到98%,可是這個分類器對于預(yù)測沒有任何用處。 解決不均衡數(shù)據(jù)集帶來的模型預(yù)測不準確的問題主要有兩種方法,第一種方法是在數(shù)據(jù)層面將數(shù)據(jù)集轉(zhuǎn)變?yōu)檩^為平衡的數(shù)據(jù)集,然后進行建模;第二種則是在算法層面改進算法模型的表現(xiàn)。 在將數(shù)據(jù)用于建模之前,先運用重抽樣技術(shù)使數(shù)據(jù)變平衡。平衡數(shù)據(jù)主要通過兩種方式達到:增加少數(shù)類的頻率或減少多數(shù)類的頻率。通過重抽樣來改變兩個種類所占的比例。 隨機欠抽樣 隨機欠抽樣技術(shù)通過隨機刪除多數(shù)類的實例來平衡種類分布。在之前的例子中,我們無放回的取10%非欺詐數(shù)據(jù),結(jié)合所有的欺詐數(shù)據(jù)形成新數(shù)據(jù)集。這樣,總觀測數(shù)據(jù)變?yōu)?0+980*10%=118,而欠抽樣之后新數(shù)據(jù)集的事件發(fā)生率為20/118=17%。 當(dāng)訓(xùn)練數(shù)據(jù)很多時,隨機欠抽樣通過減少訓(xùn)練數(shù)據(jù)的數(shù)量提高運行時間和解決存儲問題。然而,這也會帶來潛在有效信息被刪除的問題。欠抽樣選擇的數(shù)據(jù)可能是偏差樣本,無法準確代表總體。因此,會導(dǎo)致在測試集中表現(xiàn)欠佳。 過抽樣技術(shù)是通過隨機復(fù)制少數(shù)類的實例來增加少數(shù)類的數(shù)量。在之前的例子中,復(fù)制20個少數(shù)實例20遍,使少數(shù)類數(shù)據(jù)變?yōu)?00條,總觀測數(shù)據(jù)變?yōu)?80+400=1380,事件發(fā)生概率為400/1380=29%。與欠抽樣不同,過抽樣不會損失任何信息。一般來說,過抽樣表現(xiàn)好于欠抽樣。然而,由于過抽樣復(fù)制了多遍少數(shù)類數(shù)據(jù),導(dǎo)致過擬合(over-fitting)的可能性變大。 基于聚類的過抽樣 基于聚類的過抽樣是將k-means聚類算法分別應(yīng)用在少數(shù)類和多數(shù)類中,識別出數(shù)據(jù)集中不同簇(cluster)。隨后,通過對每個簇過抽樣來確保多數(shù)類和少數(shù)類的簇中實例的數(shù)目相等。假設(shè)對于剛才的數(shù)據(jù)集做聚類結(jié)果如下:
對簇過抽樣之后,每個相同種類的簇含有相同的數(shù)量的觀測數(shù)據(jù):
基于聚類的過抽樣之后,事件發(fā)生率為 500/(1020+500)=33%。這種方法考慮了多數(shù)類少數(shù)類由不同的簇組成,解決了每個簇所包含的實例不同的問題。然而,由于這是一種過抽樣技術(shù),同樣也可能會導(dǎo)致過擬合。 合成少數(shù)類過抽樣(SMOTE) SMOTE避免了復(fù)制少數(shù)類導(dǎo)致的過擬合問題。用少數(shù)類的子集來創(chuàng)造新的合成的相似少數(shù)類實例。將這些合成的實例加入原有數(shù)據(jù)集,豐富少數(shù)類的數(shù)據(jù)。下圖展示了創(chuàng)造合成實例的方法。 還是用之前的例子,在少數(shù)類中選取15個樣本實例,合成20次新的數(shù)據(jù)。少數(shù)類數(shù)據(jù)變?yōu)闉?00條,事件發(fā)生率為300/1280=23.4%。 這種方法通過合成新數(shù)據(jù)緩解了由于復(fù)制少數(shù)類帶來的過擬合問題,同時不會造成有效信息丟失。然而,當(dāng)合成新實例時,沒有考慮與其他類的相鄰實例,這可能會導(dǎo)致種類重疊,并且可能會添入額外的噪點。 算法集合技術(shù) 上面所說的技術(shù)都是通過對原數(shù)據(jù)集進行重抽樣來得到均衡數(shù)據(jù)集。在這一部分中,我們將對于現(xiàn)有分類算法進行改進,使其適用于不均衡數(shù)據(jù)集。算法合成的目的是提升單一分類器的表現(xiàn),下圖展示了合成算法的方法。 圖2:算法集合技術(shù)的方法 基于bagging Bagging是Bootstrap Aggregating的縮寫。傳統(tǒng)的bagging算法生成n個可以互相替換的bootstrap訓(xùn)練樣本。基于每個樣本,訓(xùn)練不同的模型,最后匯總這些模型的預(yù)測結(jié)果。Bagging可以減少過擬合,從而創(chuàng)造更精準的預(yù)測模型。與boosting不同的是,bagging允許對訓(xùn)練樣本集進行替換。下圖展示了bagging的流程。 在之前的例子中,從總體中可替換的抽取10個bootstrap樣本,每個樣本包含200個觀測值。每個樣本都與原始數(shù)據(jù)不相同,但是與原始數(shù)據(jù)的分布和可變性相似。很多機器學(xué)習(xí)算法都可以用來訓(xùn)練這10個bootstrap樣本,如邏輯回歸、神經(jīng)網(wǎng)絡(luò)、決策樹等,得到10個不同的分類器C1,C2…C10。將這10個分類器 集合成一個復(fù)合分類器。這種集合算法結(jié)合了多個單獨的分類器的結(jié)果,可以得到一個更好的復(fù)合分類器。Bagging算法提升了機器學(xué)習(xí)算法的穩(wěn)定性和準確性,并且解決了過擬合問題。在有噪點的數(shù)據(jù)環(huán)境中,bagging比boosting表現(xiàn)更加優(yōu)異。 基于Boosting Boosting也是一個算法集合技術(shù),它將弱分類器結(jié)合起來,形成一個可以準確預(yù)測的強分類器。Boosting從一個為訓(xùn)練集準備的弱分類器開始。弱分類器是指預(yù)測準確率只比平均數(shù)高一點的分類器,如果數(shù)據(jù)發(fā)生一點變化就會導(dǎo)致分類模型發(fā)生很大變化。Boosting是一種提高任意給定學(xué)習(xí)算法精確度的方法。下圖展示了Boosting的方法。 圖4: Boosting的方法 下面介紹幾種不同的boosting技術(shù)。 Ada Boost是Boosting算法家族中的代表算法,通過結(jié)合許多弱分類器形成一個準確的預(yù)測分類器。每個分類器的目的都是正確分類上一輪被分錯的實例。每一輪之后,被分錯的實例的權(quán)重增加,被正確分類的實例的權(quán)重降低。應(yīng)用Ada Boost到剛才的不均衡數(shù)據(jù)集中,首先給每一個實例相同的權(quán)重,假設(shè)基礎(chǔ)分類器只分對了400個實例,將這400個實例的權(quán)重減小為,剩下600個被錯分的實例的權(quán)重增加到。每一輪中,弱分類器通過更新權(quán)重來提升它的表現(xiàn)。這個過程持續(xù)到錯分率明顯下降,分類器變成了強分類器為止。Ada Boost的好處在于它非常便于執(zhí)行,而且非常普遍,適用于所有種類的分類算法,也不會導(dǎo)致過擬合。壞處是它對于噪點和異常值非常敏感。 Gradient Boosting 是一個最優(yōu)化算法,每個模型都按順序通過Gradient Descent方法最小化損失函數(shù)。在Gradient Boosting中,決策樹被當(dāng)作一個弱分類器。Ada Boost和Gradient Boosting都是將弱分類器變?yōu)閺姺诸惼鞯姆椒ǎ@兩種方法有本質(zhì)的不同。Ada Boost在學(xué)習(xí)過程開始之前要求用戶設(shè)立弱分類器集或者隨機生成弱分類器集,每一個弱分類器的權(quán)重會根據(jù)是否分類正確調(diào)整。Gradient Boosting則是在訓(xùn)練集上建立第一個分類器預(yù)測,接著計算損失值,然后運用損失值來改進分類器。每一步中,損失函數(shù)的殘差都會通過Gradient Descent Method來計算。在隨后的迭代中,新的殘差變成了目標(biāo)變量。Gradient Tree Boosting比隨機森林更難以擬合。它有三個參數(shù)可以微調(diào),Shrinkage參數(shù),樹的深度和樹的數(shù)量。選擇合適的參數(shù)才能得到好的擬合的Gradient boosted tree。如果參數(shù)調(diào)整的不正確,可能會導(dǎo)致過擬合。 結(jié)論 當(dāng)面對不均衡數(shù)據(jù)集時,沒有一個解決方案可以提升所有預(yù)測模型的準確性。我們所需要做的可能就是嘗試不同的方法,找出最適合這個數(shù)據(jù)集的方法。最有效的解決不均衡數(shù)據(jù)集的技術(shù)取決于數(shù)據(jù)集的特征。在大多數(shù)情況中,合成抽樣技術(shù)如SMOTE會比傳統(tǒng)的過抽樣和欠抽樣表現(xiàn)更好。為了得到更好的結(jié)果,可以同時使用合成抽樣技術(shù)和boosting方法。在比較不同方法時,可以考慮相關(guān)的評估參數(shù)。在比較使用前述方法所建立的多個預(yù)測模型的時候,可以用ROC曲線下的面積來得出哪個模型效果更好。 |
|