分類問題中的類別不平衡-總結

問題形式

該問題一般指的是訓練集中正負樣本數比例相差過大,其一般會造成以下的一些情況:
1. 類別少的誤判懲罰過低,導致有所偏袒,當樣本不確定時傾向於把樣本分類爲多數類。
2. 樣本數量分佈很不平衡時,特徵的分佈同樣會不平衡。
3. 傳統的評價指標變得不可靠,例如準確率。

常見解決方法

  1. 進行重採樣,過採樣 或 欠採樣
  2. 人工合成新的數據。 1)基於經驗,對屬性值進行隨機採樣,生成新的樣本。2)基於貝葉斯理論,對屬性值進行隨機採樣,可能會缺少之前屬性之間的線性相關性。3)基於系統的人工樣本生成方法,SMOTE(Synthetic Minority Over-sampling Technique),類似於KNN的數據生成算法。
  3. 嘗試多種分類算法,不同的數據形式,適合不同的算法,嘗試多種分類算法和不同的評價指標進行比較。
  4. 嘗試對模型進行懲罰,即對模型參數進行調整,例如SVM或XGBoost等。
  5. 嘗試一個新的角度理解問題。1.當作異常點檢測即是對那些罕見事件進行識別。2.化趨勢檢測類似於異常點檢測,不同在於其通過檢測不尋常的變化趨勢來識別。
  6. 嘗試着將問題分解成多個子問題進行求解。
  7. 嘗試多模型融合。
  8. 將大樣本聚成K個類別,每個類別分別與小樣本進行訓練生成分類器,再將K個結果作爲判斷標準進行判斷,例如多數表決,或作爲特徵再生成新的模型等等。

詳細參考

http://blog.csdn.net/heyongluoyao8/article/details/49408131

R語言實現-STOME算法

調用包裏自帶的例子

library(DMwR)
## A small example with a data set created artificially from the IRIS
## data 
data(iris)
data <- iris[, c(1, 2, 5)]
data$Species <- factor(ifelse(data$Species == "setosa","rare","common")) 
## checking the class distribution of this artificial data set
table(data$Species)
# common   rare 
#   100     50

## now using SMOTE to create a more "balanced problem"
newData <- SMOTE(Species ~ ., data, perc.over = 600,perc.under=100)
table(newData$Species)
# common   rare 
#   300     350

##### Plot ########
par(mfrow = c(1, 2))
plot(data[, 1], data[, 2], pch = 19 + as.integer(data[, 3]),
     main = "Original Data")
plot(newData[, 1], newData[, 2], pch = 19 + as.integer(newData[,3]),
     main = "SMOTE'd Data")

## End(Not run)

這裏寫圖片描述

## Now an example where we obtain a model with the "balanced" data
classTree <- SMOTE(Species ~ ., data, perc.over = 600,perc.under=100,
                   learner='rpartXse',se=0.5)
## check the resulting classification tree
classTree
## The tree with the unbalanced data set would be
rpartXse(Species ~ .,data,se=0.5)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章