【问题标题】:Any package in R which can Do Multi Class ,Oversampling,Under sampling,Both And SMOTE? [closed]R中的任何包都可以进行多类、过采样、欠采样、Both和SMOTE? [关闭]
【发布时间】:2018-06-21 06:27:13
【问题描述】:

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

我的目标变量有 4 个类,并且有 %。 “0”-70% “1”-15% “2”-10% “3”-5% “4”-5%

【问题讨论】:

    标签: r multiclass-classification


    【解决方案1】:

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

    如果插入符号没有,也许最好的办法是编写一个自定义代码,从变量类中随机抽取相等的数字。

    通常,实际上下采样或上采样用于二元分类。您可能需要考虑一对一的方法。如果你下采样然后,你必须调整你的概率,所以它们不受类之间各种下采样率的影响。

    更新示例代码:

    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 中放入最小类的数量。

    【讨论】:

    • 不,它适用于二进制类变量,而不是多项式类变量。
    • 见上面的更新。
    • 能否在r中添加伪代码来制作自定义采样器?
    • 见上面的更新
    【解决方案2】:

    你可以试试 SMOTE。 如果需要,SMOTE 通过生成观察来对数据进行过度或不足采样。因此,大多数情况下,smote 会执行任何其他采样技术。 这是python中的sn-p代码。在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
    

    比率在这里是超参数。

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2020-03-05
        • 2019-09-03
        • 2015-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-29
        • 2021-08-20
        • 2017-06-08
        相关资源
        最近更新 更多