1. 程式人生 > >【資料預處理】樣本不均勻

【資料預處理】樣本不均勻

工業界機器學習典型問題:

正負樣本分佈極不均勻(通常<1:10000),有什麼較好的方案構造訓練集的正負樣本分佈?構造後如何解決訓練資料與預測的分佈不一致?

  1. 上取樣、下采樣、代價敏感,沒什麼好辦法。
  2. 這個之前調研過,主要分重取樣和欠取樣!這種不平衡是因為比率的不平衡給一些學習方法帶來問題。但是在某些領域,比如反欺詐和安全,不僅是比率極不平衡,而且是正樣本樣本絕對數很小。需要擴散正樣本方法!
  3. Synthetic Minority Over-sampling Technique 我試過這個方法,解決部分問題,主要還是需要增加樣本在特徵空間的覆蓋! 工程上光靠演算法也解決不了問題,有的還是需要加入下經驗知識來做。
  4. 用排序思想構造所謂的序對。
  5. 如果1:10算是均勻的話,可以將多數類分割成為1000份。然後將每一份跟少數類的樣本組合進行訓練得到分類器。而後將這1000個分類器用assemble的方法組合位一個分類器。記得讀到的論文可行,但沒有驗證過。
  6. 標準解決方法:設計objective function的時候給不同misclassification的情況不同的relative weights。也就是說給從小數量的樣本被分成大數量的樣本更大的penalty。
  7. 訓練資料與預測資料分佈不一致,有專門研究的課題,sample selection bias,主要方法是各種reweighting。
  8. 這個倒是可以參考positive only learning等半監督學習中如早期的spy演算法等來構造合適的負例來解決正負例不平衡的問題。
  9. 這個看起來像 one-class recommendation 問題,不知是否可以考慮轉化成 learning to rank 問題,如果不是為了擬合一個分佈的話。
  10. 這在機器學習裡面被稱類別不平衡問題,可以參考Haibo, H. and E. A. Garcia (2009). “Learning from Imbalanced Data.” Knowledge and Data Engineering, IEEE Transactions on” 的survey.已有很多方法提出。
  11. 個人覺得在類別不平衡條件下,Transductive SVM (TSVM)應該對於的active learning 來標註,可能結果更好。
  12. learning to rank對於訓練資料量的要求較高,同時要確定用於learning to rank的pair,還是需要找到負例,從而將正例和負例形成偏序配對。所以learning to rank是一種方法,但個人認為這會將簡單問題複雜化,且本質還是需要去找負例。

處理內在不均衡

內在不均衡就是指資料本身特性決定了它的不均衡性。即使獲取更多的資料,仍然改變不了資料的不均衡屬性。

解決方案:

  1. 基本的方法是必須採用合理的效能評價指標,比如採用,避免大樣本類淹沒了小樣本類。對小樣本類別的分類效能也能進行有效的評估,對數損失作為評價標準不需要對不均衡樣本進行處理。
  2. 異常檢測也是處理這類不均衡樣本的方法,只對大樣本類別進行建模,小樣本類當作異常資料進行檢測。
  3. 對不同類別賦予不同重要程度的權值,小樣本賦予更大的權值

F1 Score是基於準確率和召回率的單數值評估指標,數值越高效果越好

處理外在不均衡

外在不均衡就是指資料本身特性並不能表明它是不均衡的,是由於資料獲取手段導致資料不均衡。只要獲取的資料足夠多,這種不均衡就能消除。

解決方案:

  1. 人工合成(偽造)資料:前提是瞭解資料,擁有足夠的先驗知識
  2. 採集更多的資料。

注意:

通過重取樣將資料變得均衡不一定能提升分類效能,比如不能提升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的主要思想也是通過在一些位置相近的少數類樣本中生成新樣本達到平衡類別的目的,由於不是簡單地複製少數類樣本,因此可以在一定程度上避免分類器的過度擬合。

其演算法流程如下:

  1. 設定向上取樣的倍率為N,即對每個少數類樣本都需要產生對應的N個少數類新樣本。

  2. 對少數類中的每一個樣本x,搜尋得到其k(通常取5)個少數類最近鄰樣本,並從中隨機選擇N個樣本,記為y1,y2,…,yN(可能有重複值)。

  3. 構造新的少數類樣本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方法的演算法流程非常簡單:

  1. 利用SMOTE方法生成新的少數類樣本,得到擴充後的資料集T

  2. 剔除T中的Tomek links對。

普通SMOTE方法生成的少數類樣本是通過線性差值得到的,在平衡類別分佈的同時也擴張了少數類的樣本空間,產生的問題是可能原本屬於多數類樣本的空間被少數類“入侵”(invade),容易造成模型的過擬合。

Tomek links對尋找的是那種噪聲點或者邊界點,可以很好地解決“入侵”的問題。

SMOTE+ENN

SMOTE+ENN方法和SMOTE+Tomek links方法的想法和過程都是很類似的:

  1. 利用SMOTE方法生成新的少數類樣本,得到擴充後的資料集T。

  2. 對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演算法的權重更新策略,其基本思想是對於代價高的誤分類樣本大大地提高其權重,而對於代價高的正確分類樣本適當地降低其權重,使其權重降低相對較小。總體思想是代價高樣本權重增加得大降低得慢。其樣本權重按照如下公式進行更新。其中β+和β−[Math Processing Error]分別表示樣本被正確和錯誤分類情況下

權重按照如下公式進行更新。其中[Math ProcessingError]分別表示樣本被正確和錯誤分類情況下