如何訓練非平衡資料的分類器

2021-07-22 05:33:51 字數 1747 閱讀 3288

訓練乙個分類器,第一步就是為每個類別準備大量資料。這乙個看似簡單,在實際中往往卻最難達到理想情況。因為:實際中很多分類任務的資料不是平衡的,即類與類之間的數量懸殊,例如對磁碟進行故障**分類,然而磁碟故障率每年小於1%,於是理想和現實如同如下左、右圖那樣。

有很多學者對這種非平衡資料的分類問題進行了研究,總的來說,以下是解決這個問題的主要方法:

2. 用鄰域鏈結的方法來進行下取樣: tomeklink。 如下圖,該演算法通過將少量資料類的樣本附近的乙個大量資料類的樣本進行刪除來實現。

3. 通過產生新的樣本來進行資料平衡。如smote法,通過在兩個少量樣本的中間差值獲得新的樣本。

4. 通過給不同類別賦予權重,如下圖,通過給少量資料類更高的權重獲得更好的分類效果(虛線)。然而這種方法只有在有明顯的訓練誤差下才有用。

5. 還有一些不錯的演算法。比如

box drawings for learning with imbalanced data 方法解決了資料傾斜下的訓練問題。  該演算法在

少量樣本聚類中心周圍構建box,基於此獲得了少量資料類的一種簡潔智慧型的表達。在訓練時,box的數量作為一種懲罰,同時也作為正則項。exact boxes和fast boxes是兩種訓練方法。

6. 將問題看作「異常檢測」,效果比較不錯的是:isolation-based anomaly detection, 它通過學習乙個隨機森林並獲得分割每個點的決策面的個數,這個個數可以衡量對應點的異常分數。

7. 最後,通過社會化眾包發現資料也是很多公司採用的方法。

8. 模型級聯。 easyensemble and balancecascade (exploratory under sampling for class imbalance learning).  這是個迭代清洗資料獲得多個模型的演算法。首先從整體訓練集中取樣獲得大類的子集m1,使得數量和小類s相當,然後用m1+s訓練獲得分類器h(1)。 獲得h(1)分類結果中分類正確的m1的子集m11, 認為m11是m1的冗餘,並從整體訓練集中刪去。接著重複同樣的步驟,取樣->訓練->刪冗餘,迭代直至無法獲得更好的結果。然後把所有模型級聯起來進行分類。

9. one-sided selection (oss).  這個是清洗資料使得更有利於訓練的方法。它也是迭代進行的。每次獲得tomek links,即當不存在例項使得其到大類xm和小類xs的距離小於xm和xs之間的距離,則認為(xm,xs)是乙個tomek link. 屬於tomek link的兩個例項,要麼是雜訊點,要麼是類間的邊界。如下圖,左邊虛線矩形框出了tomek links, 右邊是清理後的資料集。

原文連線: 

如何用opencv訓練自己的分類器

最近要做乙個性別識別的專案,在人臉檢測與五官定位上我採用opencv的haartraining進行定位,這裡介紹下這兩天我學習的如何用opencv訓練自己的分類器。在這兩天的學習裡,我遇到了不少問題,不過我遇到了幾個好心的大俠幫我解決了不少問題,特別是無忌,在這裡我再次感謝他的幫助。一 簡介 目標檢...

在分類中如何處理訓練集中不平衡問題

在很多機器學習任務中,訓練集中可能會存在某個或某些類別下的樣本數遠大於另一些類別下的樣本數目。即類別不平衡,為了使得學習達到更好的效果,因此需要解決該類別不平衡問題。什麼是類別不均衡問題 類別資料不均衡是分類任務中乙個典型的存在的問題。簡而言之,即資料集中,每個類別下的樣本數目相差很大。例如,在乙個...

在分類中如何處理訓練集中不平衡問題

在很多機器學習任務中,訓練集中可能會存在某個或某些類別下的樣本數遠大於另一些類別下的樣本數目。即類別不平衡,為了使得學習達到更好的效果,因此需要解決該類別不平衡問題。什麼是類別不均衡問題 類別資料不均衡是分類任務中乙個典型的存在的問題。簡而言之,即資料集中,每個類別下的樣本數目相差很大。例如,在乙個...