您的位置:首页 > 其它

分类问题中的类别不平衡-总结

2016-11-13 14:31 447 查看

问题形式

该问题一般指的是训练集中正负样本数比例相差过大,其一般会造成以下的一些情况:

1. 类别少的误判惩罚过低,导致有所偏袒,当样本不确定时倾向于把样本分类为多数类。

2. 样本数量分布很不平衡时,特征的分布同样会不平衡。

3. 传统的评价指标变得不可靠,例如准确率。

常见解决方法

进行重采样,过采样 或 欠采样

人工合成新的数据。 1)基于经验,对属性值进行随机采样,生成新的样本。2)基于贝叶斯理论,对属性值进行随机采样,可能会缺少之前属性之间的线性相关性。3)基于系统的人工样本生成方法,SMOTE(Synthetic Minority Over-sampling Technique),类似于KNN的数据生成算法。

尝试多种分类算法,不同的数据形式,适合不同的算法,尝试多种分类算法和不同的评价指标进行比较。

尝试对模型进行惩罚,即对模型参数进行调整,例如SVM或XGBoost等。

尝试一个新的角度理解问题。1.当作异常点检测即是对那些罕见事件进行识别。2.化趋势检测类似于异常点检测,不同在于其通过检测不寻常的变化趋势来识别。

尝试着将问题分解成多个子问题进行求解。

尝试多模型融合。

将大样本聚成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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐