0

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

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

4

3 回答 3

2

我相信您应该能够使用 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 中。

于 2018-01-12T05:30:05.900 回答
2

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

于 2018-05-24T14:33:58.093 回答
1

你可以试试 SMOTE。如果需要,SMOTE 通过生成观察来对数据进行过度或不足采样。因此,大多数情况下,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

ratio 在这里是超参数。

希望这可以帮助。

于 2018-04-06T04:51:47.570 回答