此文為轉(zhuǎn)載翻譯。原文地址:https://machinelearningmastery.com/framework-for-imbalanced-classification-projects/#comment-525938
分類建模問題是根據(jù)給定的輸入做類別預(yù)測罩旋。這是一個有挑戰(zhàn)性的問題离斩,很多時候我們對數(shù)據(jù)集知之甚少簿姨,還要從成百(如果沒有上千的話)的機器學(xué)習(xí)算法中選擇迄沫。如果樣本的類別不均衡問題難度會增加膘怕。對于偏斜的類別分布需要使用特別的方法來改變數(shù)據(jù)集或?qū)W習(xí)算法捞烟。
面對一個新的分類問題通常會選擇隨機森林或SMOTE等熱門方法試一下赎瑰。另一個方法是搜索描述類似問題的研究文獻(xiàn)并嘗試文獻(xiàn)中的方法王悍。
以上方法可能有效,但是有點漫無目的并非常消耗時間餐曼。解決新分類問題的最快方法是系統(tǒng)的評估一套機器學(xué)習(xí)算法以發(fā)現(xiàn)哪個有效压储,然后雙倍下注。這個方法同樣適用于不均衡分類問題源譬。
這篇文章中集惋,你會通過不均衡分類數(shù)據(jù)發(fā)現(xiàn)解決問題的系統(tǒng)框架〔饶铮看完這篇文章你會知道:
1. 為不均衡分類問題選擇算法的挑戰(zhàn)
2. 系統(tǒng)解決不均衡分類問題的框架
3. 關(guān)于不均衡分類問題的特別算法建議
文章目錄
文章分為三個部分:
1. 用什么算法
2. 系統(tǒng)框架
3. 不均衡分類的具體框架
? ? 1. 選擇評價指標(biāo)
? ? 2. spot check算法
? ? 3. spot check 不均衡算法
? ? 4. 超參數(shù)調(diào)優(yōu)
一. 用什么算法
你手上有一堆不均衡分類的數(shù)據(jù)刮刑,現(xiàn)在怎么辦?有如此多機器學(xué)習(xí)算法可供選擇养渴,更別提特別為不均衡分類問題設(shè)計的特殊算法了雷绢。
用什么算法?怎么選擇理卑?
在面對新不均衡分類問題的時候面臨的第一個挑戰(zhàn)就是選擇算法翘紊。這個挑戰(zhàn)使得應(yīng)用機器學(xué)習(xí)算法讓人感到又激動又害怕。
通常兩種方法解決該問題:1. 用你最喜歡的算法 2. 用之前驗證有效的算法傻工。實際當(dāng)中這兩種方式都有很大偶然性霞溪,常常沒有效果。已有的研究論文總是傾向于讓一個算法顯得令人可期待而不是客觀的算法間的比較中捆。如果對數(shù)據(jù)集知之甚少鸯匹,最快的方法是系統(tǒng)性的測試一系列不同算法。
二. 系統(tǒng)框架
先說一個平衡分類問題泄伪。
你同樣會面對選擇算法的問題殴蓬,測試一系列算法仍然是最穩(wěn)健的途徑。這個過程可以被總結(jié)為:
1. 選擇一個衡量指標(biāo)
2. spot check algorithms
3. 超參數(shù)調(diào)優(yōu)
不均衡分類問題可以先在常用的機器學(xué)習(xí)算法上測試蟋滴,對于不均衡數(shù)據(jù)這些算法通常表現(xiàn)不好染厅,但結(jié)果可以作為基準(zhǔn)線和其他算法對比。最后對表現(xiàn)好的算法調(diào)參也是非常重要的津函。我們總結(jié)下不均衡數(shù)據(jù)的算法選擇步驟肖粮,在之前的步驟上增加了一項:
1. 選擇一個衡量指標(biāo)
2. spot check algorithms
3. spot check imbalanced algorithms
4. hyperparametr tuning
這提供了解決不均衡數(shù)據(jù)分類問題的高層系統(tǒng)性框架。同樣我們需要一個類似的底層系統(tǒng)性框架尔苦。
三. 不均衡問題的底層框架
解決不均衡分類問題的每個步驟涩馆,都可以再細(xì)分到底層的系統(tǒng)性框架行施,從衡量指標(biāo)的選擇到超參數(shù)的調(diào)優(yōu)
選擇衡量指標(biāo)
衡量指標(biāo)應(yīng)該能捕捉模型的細(xì)節(jié)或者對項目相關(guān)人員重要的預(yù)測。
這很困難因為有太多指標(biāo)可以選擇而項目相關(guān)人員常常不確定他們要什么魂那《旰牛可以嘗試不同的指標(biāo)來看看哪些對項目相關(guān)人來說比較重要。
首先你先判斷是想預(yù)測概率還是類別涯雅。注意對于二元不均衡分類任務(wù)鲜结,多數(shù)類是正常的,叫做“negtive class"活逆,少數(shù)類是例外精刷,叫做"positive class"
概率表征了預(yù)測的不確定性而類別標(biāo)簽可以直接使用
????Probabilities:預(yù)測每個案例屬于每個類別的概率
????class labels: 預(yù)測每個案例的類別
選擇衡量指標(biāo)_預(yù)測概率
如果要直接用概率,可以選擇Brier Score 和 Brier Skill score
如果你想預(yù)測概率并允許用戶自己映射概率和類別划乖,可以使用precision-recall 曲線和曲線下的面積(PR AUC)贬养。這個指標(biāo)能提供最優(yōu)化的準(zhǔn)確率和覆蓋率。
如果類別同樣重要則可以使用ROC曲線和去線下的面積(ROC AUC)
選擇衡量指標(biāo)_預(yù)測類別
如果預(yù)測類別標(biāo)簽并且類別同等重要琴庵,一個好的默認(rèn)指標(biāo)是準(zhǔn)確率误算。這在數(shù)據(jù)的主要分類占整體數(shù)據(jù)80%以下時有效。如果主要類別達(dá)到大于整體80%或90%的傾斜迷殿,準(zhǔn)確率指標(biāo)就失去了比較算法的意義儿礼。
如果類別分布嚴(yán)重傾斜,可以使用G-mean 指標(biāo)
如果正類比較重要庆寺,可以使用F-Measure來優(yōu)化精準(zhǔn)率和覆蓋率蚊夫。如果兩類同等重要可以用F1。如果負(fù)類重要懦尝,使用F2-Measure知纷。如果假正類帶來損失大,則使用F0.5-Measure.
選擇衡量指標(biāo)_底層框架
Spot check algorithms
spot check 機器學(xué)習(xí)算法指用最少的超參數(shù)評估一系列不同類型算法陵霉。這包括給每個算法一個機會來學(xué)習(xí)這個問題琅轧,包括算法需要的預(yù)處理和最佳實踐配置。這樣做的目的是快速測試一系列標(biāo)準(zhǔn)算法并給為不能均衡數(shù)據(jù)特別設(shè)計的算法提供一個基準(zhǔn)線可以比較踊挠。如果使用炫酷的不均衡算法沒有帶來杰出的效果則沒有使用的意義乍桂。
需要定義一個穩(wěn)定的測試工具。常用的包括k-fold cross-validation效床,默認(rèn)是k-10睹酌。分層交叉驗證可以用來保證每個fold和原始數(shù)據(jù)有相同的分布。交叉驗證過程常常重復(fù)多次以保證有效獲取數(shù)據(jù)集上的模型表現(xiàn)剩檀,用分?jǐn)?shù)的均值和標(biāo)準(zhǔn)差作為結(jié)果憋沿。
spot check algorithm可以分四個層級:
1. naive algorithms
2. linear algorithms
3. nonlinear algorithms
4. ensembole algorithms
Spot check algorithm_naive algorithm
首先用樸素分類法。這提供了算法表現(xiàn)的基準(zhǔn)值沪猴,其他算法應(yīng)該優(yōu)于該表現(xiàn)辐啄。樸素的意思是只有”如果..那么"邏輯或預(yù)測一個常量甥绿。樸素算法的選擇應(yīng)根據(jù)衡量指標(biāo)的選擇而定。比如針對準(zhǔn)確率的樸素算法是預(yù)測數(shù)據(jù)中的多數(shù)類则披。針對評估概率的Brier Score指標(biāo)應(yīng)該選擇預(yù)測類別的先驗概率。下面是一個指標(biāo)和樸素算法之間的映射關(guān)系洗出,供參考:
1. Accuracy: 預(yù)測多數(shù)類(class 0)
2. G_mean: 預(yù)測隨機類別
3. F-Measure:預(yù)測少數(shù)(class1)
4. ROC AUC:預(yù)測分層隨機類別
5. PR ROC:預(yù)測分層隨機類別
6. Brier Score:預(yù)測多數(shù)類的先驗概率
如果不確定適合你衡量指標(biāo)的樸素算法士复,可以通過測試結(jié)果選擇。樸素算法包括:
1. 預(yù)測多數(shù)類
2. 預(yù)測少數(shù)類
3. 預(yù)測隨機選擇類
4. 預(yù)測根據(jù)每個類別先驗概率選擇的類
5. 預(yù)測類別的先驗概率
Spot check algorithm_linear algorithms
線性算法對待解決問題的方程做了嚴(yán)格的假設(shè)翩活。我們說線性指輸出是輸入的線性組合或加權(quán)組合阱洪,當(dāng)然這個定義是有彈性的。我們也叫這些算法概率算法菠镇,因為他們在概率框架下冗荸。
線性算法訓(xùn)練快、表現(xiàn)好利耍。常見的線性算法包括:
1. logistic regression
2. linear discriminant analysis
3. naive bayes
Spot check algorithm_Nonlinear algorithms
非線性算法對待解決問題的方程做的限制不多蚌本。非線性算法的輸出是輸入的非線性映射。這類算法一般比線性算法需要更多數(shù)據(jù)隘梨,訓(xùn)練的也更慢程癌。常見的非線性算法包括:
1. Decision Tree
2. k-Nearest Neighbors
3. Artificial Neural Networks
4. Support Vector Machine
Spot check algorithm_Ensemble Algorithms
集成算法結(jié)合了多個模型的預(yù)測。有多重集成算法可供選擇轴猎,但是做spot-check 算法時最好用決策樹集成算法嵌莉,這是已知的在各種實際問題中表現(xiàn)良好的算法∧聿保可以考慮的決策樹集成算法包括:
1. Bagged Decision Trees
2. Random Forest
3. Extra Trees
4. Stochastic Gradient Boosting
Spot check algorithm_Framework for spot-checking machine learning algorithms
把上述內(nèi)容整合成一個框架如下:
這些步驟的順序并不建議隨意變更锐峭。從上到下算法的復(fù)雜性逐漸增加,對應(yīng)的模型能力也逐漸增強可婶。
每步中算法的順序是靈活的沿癞,并且列出的并不是全部。把測試算法限制在最常用的算法中是一個好的開始扰肌。做算法默認(rèn)的數(shù)據(jù)預(yù)處理抛寝、使用默認(rèn)的超參數(shù)也是一個好的開始。
下圖是框架的總結(jié):
spot check imbalanced algorithms
不均衡數(shù)據(jù)算法和均衡數(shù)據(jù)算法類似曙旭。目標(biāo)是快速嘗試大量算法以發(fā)現(xiàn)最合適的方向來深入調(diào)參盗舰。之前說到的均衡數(shù)據(jù)算法都可以用到不均衡數(shù)據(jù)上并和不均衡算法比較。這讓你能聚焦在解決問題最好的方法上桂躏,而不是只在不均衡數(shù)據(jù)分類算法里擇優(yōu)钻趋。大概有4類不均衡分類算法:
1. Data sampling algorithms
2. cost-sensitive algorithms
3. one-class algorithms
4. probability tuning algorithms
spot check imbalanced algorithms_data sampling algorithms
數(shù)據(jù)抽樣算法改變訓(xùn)練數(shù)據(jù)集的構(gòu)成來改進(jìn)標(biāo)準(zhǔn)機器學(xué)習(xí)算法在不均衡數(shù)據(jù)上的表現(xiàn)。大概有三種數(shù)據(jù)抽樣技術(shù):
1. data oversampling
2. data undersampling
3. combined oversampling and undersampling
數(shù)據(jù)過采樣是從已有數(shù)據(jù)中重復(fù)或合成少數(shù)類案例剂习。當(dāng)前最流行的方法是SMOTE和變種算法如Borderline SMOTE. 最重要的待調(diào)超參數(shù)是過采樣的數(shù)量蛮位。數(shù)據(jù)過采樣方法包括:
1. 隨機過采樣
2. SMOTE
3. borderline SMOTE
4. SVM SMote
5. k-means SMOTE
6. ADASYN
欠采樣包括從多數(shù)類中刪除一些樣本较沪,可以是隨機也可以是用算法選擇特定樣本做刪除。流行的算法包括nearest neighbors失仁、tomek links
欠采樣算法包括:
1. random undersampling
2. condensed nearest neighbor
3. tomek links
4. edited nearest neighbors
5. neighborhood cleaning rule
6. one-sided selection
幾乎所有的過采樣算法都可以和所有欠采樣技術(shù)結(jié)合尸曼。因此結(jié)合不同過采樣和欠采樣技術(shù)也許能帶來驚喜。流行的欠采樣和過采樣結(jié)合算法包括:
1. SMOTE and? random undersampling
2. SMOTE and tomek links
3. SMOTE and edited nearest neighbors
數(shù)據(jù)采樣算法在不同的機器學(xué)習(xí)算法上表現(xiàn)可能不同萄焦。因此采樣算法最好在前面提過的不同算法上嘗試控轿。另外大多數(shù)數(shù)據(jù)采樣算法都內(nèi)嵌使用了k-nearest neighbor algorithm。這個算法對數(shù)據(jù)類型和輸入變量的量級非常敏感拂封。因此在測試方法前標(biāo)準(zhǔn)化量級不同輸入變量很重要茬射,對于一些類別變量要做特別處理。
spot check imbalanced algorithms_cost-sensitive algorithms
代價敏感的算法是考慮誤分類帶來的不同代價而設(shè)計的機器學(xué)習(xí)算法的改進(jìn)版冒签。這些算法應(yīng)用在不均衡分類問題上效果較好在抛,誤分類的代價可以和訓(xùn)練集數(shù)據(jù)中數(shù)據(jù)分布比例相反。很多代價敏感算法可供選擇萧恕,一個有效的實踐方法是嘗試線性刚梭、非線性和集成算法的代價敏感版本。
一些可以被配置成代價敏感訓(xùn)練方式的機器學(xué)習(xí)算法包括:
1. logistic regression
2. decision trees
3. support vector machines
4. artificial neural networks
5. bagged decision trees
6. random forest
7.stochastic gradient boosting
spot check imbalanced algorithms_one-class algorithms
用來做離群值檢測和異常檢測的算法也可以用來做分類任務(wù)廊鸥。盡管不常用望浩,但當(dāng)被用作分類算法時它們通常被叫做one-class分類算法。一些情況下這個算法非常有效惰说,比如嚴(yán)重的類別不均衡磨德,正類只有寥寥幾個的時候。一些one-class的分類算法包括:
1. one-class support vector machines
2. isolation forests
3. minimum covariance determinant
4. local outlier factor
spot check imbalanced algorithms_probability tuning algorithms
概率預(yù)測可以通過兩個方法改進(jìn):
1. calibrating probabilities(概率校準(zhǔn))
2. tuning the classification threshold(調(diào)節(jié)分類閾值)
calibrating probabilities:
一些算法使用概率框架訓(xùn)練吆视,因此有校準(zhǔn)概率典挑。當(dāng)一個二元分類任務(wù)中概率用來作為輸出或用作評估模型的時候可以使用概率校準(zhǔn)。一些預(yù)測校準(zhǔn)概率的機器學(xué)習(xí)算法的例子包括:
1. logistic regression
2. linear discriminant analysis
3. naive bayes
4. artificial neural networks
大多數(shù)非線性算法不預(yù)測校準(zhǔn)概率啦吧,因此校準(zhǔn)算法可以用來對預(yù)測概率做后處理以校準(zhǔn)他們您觉。
因此當(dāng)概率值直接作為輸出或用來評價模型,并且使用了非線性算法時授滓,校準(zhǔn)預(yù)測概率很重要琳水。一些概率校準(zhǔn)算法包括:
1. platt scaling
2. isotonic regression
tuning the classification threshold
一些算法被設(shè)計成預(yù)測概率,然后由概率映射成類別般堆。如果把類別標(biāo)簽作為輸出或模型通過類別標(biāo)簽做評估時一般都屬于這種情況在孝。默認(rèn)預(yù)測概率值的機器學(xué)習(xí)算法包括:
1. logistic regression
2. linear discriminant analysis
3. naive bayes
4. artifical neural networks
概率通過閾值映射到類別。所有閾值之下的概率映射到0淮摔,所有大于等于閾值的映射成1.默認(rèn)閾值是0.5私沮,不同閾值會對類別標(biāo)簽的預(yù)測產(chǎn)生巨大影響,因此也直接影響模型的預(yù)測表現(xiàn)和橙。因此概率算法原本預(yù)測概率值仔燕,類別標(biāo)簽作為輸出或評估模型的時候造垛,可以嘗試調(diào)整分類閾值。
spot check imbalanced algorithms_framework for spot-checking imbalanced algorithms
步驟間的順序是靈活的晰搀,每步中算法的順序也是靈活的五辽,羅列的算法清單并不完整。下圖是一個總結(jié)
調(diào)參
spot-checking機器學(xué)習(xí)算法和不均衡數(shù)據(jù)算法之后外恕,你已經(jīng)知道哪些算法在你的數(shù)據(jù)上有效奔脐,哪些無效。最簡單的方式是選擇前5個或10個表現(xiàn)最好的算法/算法組合然后分別調(diào)參吁讨。
有三個流行的調(diào)參算法可以參考:
1. random search
2. grid search
3. bayesian optimization
如果你知道可以嘗試哪些超參數(shù)的值,grid search是一個不錯的選擇峦朗,否則應(yīng)該使用random search建丧。 如果可能的話應(yīng)該使用Bayesian optimization但建立和運行這個方法很有挑戰(zhàn)。