工業界機器學習典型問題:
正負樣本分布極不均勻(通常<1:10000),有什么較好的方案構造訓練集的正負樣本分布?構造后如何解決訓練數據與預測的分布不一致?
- 上采樣、下采樣、代價敏感,沒什么好辦法。
- 這個之前調研過,主要分重采樣和欠采樣!這種不平衡是因為比率的不平衡給一些學習方法帶來問題。但是在某些領域,比如反欺詐和安全,不僅是比率極不平衡,而且是正樣本樣本絕對數很小。需要擴散正樣本方法!
- Synthetic Minority Over-sampling Technique 我試過這個方法,解決部分問題,主要還是需要增加樣本在特征空間的覆蓋! 工程上光靠算法也解決不了問題,有的還是需要加入下經驗知識來做。
- 用排序思想構造所謂的序對。
- 如果1:10算是均勻的話,可以將多數類分割成為1000份。然后將每一份跟少數類的樣本組合進行訓練得到分類器。而后將這1000個分類器用assemble的方法組合位一個分類器。記得讀到的論文可行,但沒有驗證過。
- 標准解決方法:設計objective function的時候給不同misclassification的情況不同的relative weights。也就是說給從小數量的樣本被分成大數量的樣本更大的penalty。
- 訓練數據與預測數據分布不一致,有專門研究的課題,sample selection bias,主要方法是各種reweighting。
- 這個倒是可以參考positive only learning等半監督學習中如早期的spy算法等來構造合適的負例來解決正負例不平衡的問題。
- 這個看起來像 one-class recommendation 問題,不知是否可以考慮轉化成 learning to rank 問題,如果不是為了擬合一個分布的話。
- 這在機器學習里面被稱類別不平衡問題,可以參考Haibo, H. and E. A. Garcia (2009). “Learning from Imbalanced Data.” Knowledge and Data Engineering, IEEE Transactions on” 的survey.已有很多方法提出。
- 個人覺得在類別不平衡條件下,Transductive SVM (TSVM)應該對於的active learning 來標注,可能結果更好。
- learning to rank對於訓練數據量的要求較高,同時要確定用於learning to rank的pair,還是需要找到負例,從而將正例和負例形成偏序配對。所以learning to rank是一種方法,但個人認為這會將簡單問題復雜化,且本質還是需要去找負例。
處理內在不均衡
內在不均衡就是指數據本身特性決定了它的不均衡性。即使獲取更多的數據,仍然改變不了數據的不均衡屬性。
解決方案:
- 基本的方法是必須采用合理的性能評價指標,比如采用F1 Scorce,避免大樣本類淹沒了小樣本類。對小樣本類別的分類性能也能進行有效的評估,對數損失作為評價標准不需要對不均衡樣本進行處理。
- 異常檢測也是處理這類不均衡樣本的方法,只對大樣本類別進行建模,小樣本類當作異常數據進行檢測。
- 對不同類別賦予不同重要程度的權值,小樣本賦予更大的權值。
F1 Score是基於准確率和召回率的單數值評估指標,數值越高效果越好
處理外在不均衡
外在不均衡就是指數據本身特性並不能表明它是不均衡的,是由於數據獲取手段導致數據不均衡。只要獲取的數據足夠多,這種不均衡就能消除。
解決方案:
- 人工合成(偽造)數據:前提是了解數據,擁有足夠的先驗知識
- 采集更多的數據。
注意:
通過重采樣將數據變得均衡不一定能提升分類性能,比如不能提升logistic回歸性能,但對隨機森林有效(但隨機森林不適合用於不均衡數據)
參考: http://www.win-vector.com/blog/2015/02/does-balancing-classes-improve-classifier-performance/ 需要再看
轉自:
http://qianjiye.de/2014/12/unbalanced-data-sets#lin_ml_ne_2014
https://zhuanlan.zhihu.com/p/21406238
在類別不平衡的情況下,對模型使用F值或者AUC值是更好的選擇。
處理不平衡數據,可以從兩方面考慮:一是改變數據分布,從數據層面使得類別更為平衡;
二是改變分類算法,在傳統分類算法的基礎上對不同類別采取不同的加權方式,使得模型更看重少數類。
本部分對數據層面的一些方法做一個介紹,改變數據分布的方法主要是重采樣:
-
欠采樣:減少多數類樣本的數量
-
過采樣:增加少數類樣本的數量
-
綜合采樣:將過采樣和欠采樣結合
一、欠采樣
隨機欠采樣
減少多數類樣本數量最簡單的方法便是隨機剔除多數類樣本,可以事先設置多數類與少數類最終的數量比例ratio,在保留少數類樣本不變的情況下,根據ratio隨機選擇多數類樣本。
-
優點:操作簡單,只依賴於樣本分布,不依賴於任何距離信息,屬於非啟發式方法。
-
缺點:會丟失一部分多數類樣本的信息,無法充分利用已有信息。
Tomek links方法
首先來看一些定義。
假設樣本點xi和xj屬於不同的類別,d(xi,xj)表示兩個樣本點之間的距離。
稱(xi,xj)為一個Tomek link對,如果不存在第三個樣本點xl使得d(xl,xi)<d(xi,xj)或者d(xl,xj)<d(xi,xj)成立。
容易看出,如果兩個樣本點為Tomek link對,則其中某個樣本為噪聲(偏離正常分布太多)或者兩個樣本都在兩類的邊界上。
Tomek link對一般有兩種用途:
-
欠采樣:將Tomek link對中屬於多數類的樣本剔除。
-
數據清洗:將Tomek link對中的兩個樣本都剔除。
NearMiss方法
NearMiss方法是利用距離遠近剔除多數類樣本的一類方法,實際操作中也是借助kNN,總結起來有以下幾類:
-
NearMiss-1:在多數類樣本中選擇與最近的3個少數類樣本的平均距離最小的樣本。
-
NearMiss-2:在多數類樣本中選擇與最遠的3個少數類樣本的平均距離最小的樣本。
-
NearMiss-3:對於每個少數類樣本,選擇離它最近的給定數量的多數類樣本。
NearMiss-1和NearMiss-2方法的描述僅有一字之差,但其含義是完全不同的:NearMiss-1考慮的是與最近的3個少數類樣本的平均距離,是局部的;NearMiss-2考慮的是與最遠的3個少數類樣本的平均距離,是全局的。
NearMiss-1方法得到的多數類樣本分布也是“不均衡”的,它傾向於在比較集中的少數類附近找到更多的多數類樣本,而在孤立的(或者說是離群的)少數類附近找到更少的多數類樣本,原因是NearMiss-1方法考慮的局部性質和平均距離。
NearMiss-3方法則會使得每一個少數類樣本附近都有足夠多的多數類樣本,顯然這會使得模型的精確度高、召回率低。
論文中有對這幾種方法的比較,得到的結論是NearMiss-2的效果最好,不過這也是需要綜合考慮數據集和采樣比例的不同造成的影響。
二、過采樣
隨機過采樣
與欠采樣對應,增加少數類樣本數量最簡單的方法便是隨機復制少數類樣本,可以事先設置多數類與少數類最終的數量比例ratio,在保留多數類樣本不變的情況下,根據ratio隨機復制少數類樣本。
在使用的過程中為了保證所有的少數類樣本信息都會被包含,可以先完全復制一份全量的少數類樣本,再隨機復制少數類樣本使得數量比例滿足給定的ratio。
-
優點:操作簡單,只依賴於樣本分布,不依賴於任何距離信息,屬於非啟發式方法。
-
缺點:重復樣本過多,容易造成分類器的過擬合。
SMOTE (算法實現:http://blog.csdn.net/march_on/article/details/48650237)
SMOTE全稱為Synthetic Minority Over-sampling Technique,主要思想來源於手寫字識別:對於手寫字的圖片而言,旋轉、扭曲等操作是不會改變原始類別的(要排除翻轉和180度大規模旋轉這類的操作,因為會使得“9”和“6”的類別發生變化),因而可以產生更多的樣本。
SMOTE的主要思想也是通過在一些位置相近的少數類樣本中生成新樣本達到平衡類別的目的,由於不是簡單地復制少數類樣本,因此可以在一定程度上避免分類器的過度擬合。
其算法流程如下:
-
設置向上采樣的倍率為N,即對每個少數類樣本都需要產生對應的N個少數類新樣本。
-
對少數類中的每一個樣本x,搜索得到其k(通常取5)個少數類最近鄰樣本,並從中隨機選擇N個樣本,記為y1,y2,…,yN(可能有重復值)。
-
構造新的少數類樣本rj=x+rand(0,1)∗(yj−x),其中rand(0,1)表示區間(0,1)內的隨機數。(對每個少數類樣本a,從它的最近鄰中隨機選一個樣本b,然后在a、b之間的連線上隨機選一點作為新合成的少數類樣本)
三、綜合采樣
目前為止我們使用的重采樣方法幾乎都是只針對某一類樣本:對多數類樣本欠采樣,對少數類樣本過采樣。也有人提出將欠采樣和過采樣綜合的方法,解決樣本類別分布不平衡和過擬合問題,本部分介紹其中的兩個例子:SMOTE+Tomek links和SMOTE+ENN。
SMOTE+Tomek links
SMOTE+Tomek links方法的算法流程非常簡單:
-
利用SMOTE方法生成新的少數類樣本,得到擴充后的數據集T
-
剔除T中的Tomek links對。
普通SMOTE方法生成的少數類樣本是通過線性差值得到的,在平衡類別分布的同時也擴張了少數類的樣本空間,產生的問題是可能原本屬於多數類樣本的空間被少數類“入侵”(invade),容易造成模型的過擬合。
Tomek links對尋找的是那種噪聲點或者邊界點,可以很好地解決“入侵”的問題。
SMOTE+ENN
SMOTE+ENN方法和SMOTE+Tomek links方法的想法和過程都是很類似的:
-
利用SMOTE方法生成新的少數類樣本,得到擴充后的數據集T。
-
對T中的每一個樣本使用kNN(一般k取3)方法預測,若預測結果和實際類別標簽不符,則剔除該樣本。
四、Informed Understanding
SMOTE算法是為了解決隨機過采樣容易發生的模型過擬合問題,對應的也有一些方法解決隨機欠采樣造成的數據信息丟失問題。本部分的Informed Undersampling是對欠采樣的補充,因為其中有一些集成(ensemble)的想法,因此單獨介紹。
EasyEnsemble
EasyEnsemble的想法非常簡單,假設少數類樣本集合為P,多數類樣本集合為N,樣本量分別為|P|和|N|,其算法流程如下:
隨機欠采樣會導致信息缺失,EasyEnsemble的想法則是多次隨機欠采樣,盡可能全面地涵蓋所有信息,算法特點則是利用boosting減小偏差(AdaBoost)、bagging減小方差(集成分類器)。實際應用的時候也可以嘗試選用不同的分類器來提高分類的效果。
BalanceCascade
EasyEnsemble算法訓練的子過程是獨立的,BalanceCascade則一種級聯算法,這種級聯的思想在圖像識別中用途非常廣。論文中詳細描述了BalanceCascade的算法流程:
BalanceCascade算法得到的是一個級聯分類器,將若干個強分類器由簡單到復雜排列,只有和少數類樣本特征比較接近的才有可能輸入到后面的分類器,比如邊界點,因此能更充分地利用多數類樣本的信息,一定程度上解決隨機欠采樣的信息丟失問題。
改變分類算法
代價矩陣
采樣算法從數據層面解決不平衡數據的學習問題,在算法層面上解決不平衡數據學習的方法主要是基於代價敏感學習算法(Cost-Sensitive Learning),代價敏感學習方法的核心要素是代價矩陣,我們注意到在實際的應用中不同類型的誤分類情況導致的代價是不一樣的,例如在醫療中,“將病人誤疹為健康人”和“將健康人誤疹為病人”的代價不同;在信用卡盜用檢測中,“將盜用誤認為正常使用”與“將正常使用識破認為盜用”的代價也不相同,因此我們定義代價矩陣如下圖5所示。標記Cij為將類別j誤分類為類別i的代價,顯然C_00=C_11=0,C_01,C_10為兩種不同的誤分類代價,當兩者相等時為代價不敏感的學習問題。
基於以上代價矩陣的分析,代價敏感學習方法主要有以下三種實現方式,分別是:
1、從學習模型出發,着眼於對某一具體學習方法的改造,使之能適應不平衡數據下的學習,研究者們針對不同的學習模型如感知機,支持向量機,決策樹,神經網絡等分別提出了其代價敏感的版本。以代價敏感的決策樹為例,可從三個方面對其進行改進以適應不平衡數據的學習,這三個方面分別是決策閾值的選擇方面、分裂標准的選擇方面、剪枝方面,這三個方面中都可以將代價矩陣引入,具體實現算法可參考參考文獻中的相關文章。
2、從貝葉斯風險理論出發,把代價敏感學習看成是分類結果的一種后處理(先驗信息),按照傳統方法學習到一個模型,以實現損失最小為目標對結果進行調整,優化公式如下所示。此方法的優點在於它可以不依賴所用具體的分類器,但是缺點也很明顯它要求分類器輸出值為概率。
3、從預處理的角度出發,將代價用於權重的調整,使得分類器滿足代價敏感的特性,下面講解一種基於Adaboost的權重更新策略。
AdaCost算法修改了Adaboost算法的權重更新策略,其基本思想是對於代價高的誤分類樣本大大地提高其權重,而對於代價高的正確分類樣本適當地降低其權重,使其權重降低相對較小。總體思想是代價高樣本權重增加得大降低得慢。其樣本權重按照如下公式進行更新。其中$\beta_+$和 \beta_{-} 分別表示樣本被正確和錯誤分類情況下 $ \beta $ 的取值。
參考: