簡體   English   中英

處理多類分類問題中的不平衡數據

[英]Handling imbalanced data in multi-class classification problem

我有多類分類問題,數據嚴重傾斜。 我的目標變量 (y) 有 3 個類,它們在數據中的百分比如下: - 0=3% - 1=90% - 2=7%

我正在尋找 R 中的包,它可以進行多類過采樣、欠采樣或這兩種技術。

如果它在 R 中不可行,那么我可以在哪里處理這個問題。?

PS:我嘗試在 R 中使用 ROSE 包,但它僅適用於二進制類問題。

好吧,有一個caret ,它提供了廣泛的 ML 算法,包括用於多類問題。

它還可以通過以下方式應用下采樣和上采樣方法: downSample() , upSample()

trainclass <- data.frame("label" = c(rep("class1", 100), rep("class2", 20), rep("class3", 180)),
                         "predictor1" = rnorm(300, 0 ,1),
                         "predictor2" = sample(c("this", "that"), 300, replace = TRUE))

> table(trainclass$label)
class1 class2 class3 
   100     20    180 

#then use
set.seed(234)
dtrain <- downSample(x = trainclass[, -1],
                     y = trainclass$label)

> table(dtrain$Class)
class1 class2 class3 
    20     20     20 

不錯的壯舉:它還可以在應用重采樣程序(例如交叉驗證)的同時進行下采樣、上采樣以及 SMOTE 和 ROSE

這使用下采樣執行 10 倍交叉驗證。

ctrl <- caret::trainControl(method = "cv",
                   number = 10,
                   verboseIter = FALSE,
                   summaryFunction = multiClassSummary
                   sampling = "down")

set.seed(42)
model_rf_under <- caret::train(Class ~ ., 
                               data = data,
                               method = "rf",
                               trControl = ctrl)

在此處查看更多信息: https : //topepo.github.io/caret/subsampling-for-class-imbalances.html

另請查看mlrhttps : mlr

您可以在 DMwR 包下使用 SMOTE 功能。 我創建了一個示例數據集並制作了三個不平衡類..

install.packages("DMwR")
library(DMwR)

## A small example with a data set created artificially from the IRIS
## data 
data(iris)

#setosa 90%, versicolor 3% and virginica 7%
Species<-c(rep("setosa",135),rep("versicolor",5),rep("virginica",10))
data<-cbind(iris[,1:4],Species)
table(data$Species)

不平衡類:

setosa versicolor  virginica 
  135       5         10 

現在,為了恢復 2 個不平衡類,對數據應用 SMOTE 函數 2 次......

First_Imbalence_recover <- DMwR::SMOTE(Species ~ ., data, perc.over = 2000,perc.under=100)

Final_Imbalence_recover <- DMwR::SMOTE(Species ~ ., First_Imbalence_recover, perc.over = 2000,perc.under=200)
table(Final_Imbalence_recover$Species)

最終平衡類:

setosa versicolor  virginica 
    79         81         84

注意:這些示例將通過使用來自少數類每個示例的 k 個最近鄰居的信息生成。 參數 k 控制使用多少這些鄰居。 因此,每次運行時課程可能會有所不同,這不應該影響整體平衡。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM