R中的任何包可以进行多类,过采样,欠采样,两者和SMOTE?

时间:2018-01-11 20:28:01

标签: r multiclass-classification

我正在寻找可以进行多类过采样,欠采样或两种技术的包。我尝试使用ROSE包但它只适用于二进制类。

我的目标变量有4个类,有%。 " 0" -70%" 1" -15%" 2" -10%" 3" -5%" 4&# 34; -5%

3 个答案:

答案 0 :(得分:2)

我相信您应该能够使用Caret包对两个以上的类进行缩减采样或上采样。

如果插入没有,也许最好的方法就是编写一个自定义代码,从变量classess中随机抽取相同的数字。

通常,在实践中,下采样或上采样用于二进制分类。您可能想要考虑一对一的方法。如果你进行缩减采样,则必须调整概率,这样它们就不会受到各类之间各种下采样率的影响。

更新示例代码:

y = c("A", "A","A", "B", "B", "C", "C", "C","C", "C", "C") 
x = c(1,2,1,2,3,4,5,4,5,6,7) 
data=cbind(y=y,x1=x)

fin=NULL
for (i in unique(y)) {
sub=subset(data, y==i)
sam=sub[sample(nrow(sub), 2), ]
fin=rbind(fin, sam)}

结果:

y   x1

A   2
A   1
B   3
B   2
C   6
C   7

我已经从这里的每个Y中抽取了2个 - 而不是2个,你应该把最小的数字放在你的Y中。

答案 1 :(得分:1)

您可以尝试SMOTE。 如果需要,通过生成观察结果对数据进行过度采样或不采样。因此,大多数情况下,击出执行任何其他采样技术。 这是python中的一段代码。在R中,使用SMOTE平衡目标变量的级别分布有点困难,但可以一次考虑2个类来完成

from imblearn.over_sampling import SMOTE
sm = SMOTE(random_state=99, ratio = 1.0)
x_train, y_train = sm.fit_sample(X_var, target_class)
print(pandas.value_counts(y_train))#verify class distribution here

比率是超参数。

希望这有帮助。

答案 2 :(得分:1)

您可以使用R UBL package。它具有几种过采样多类问题的技术实现,例如, ADASYN和其他算法来处理不平衡的类。