【问题标题】:How to balance a dataset without oversampling如何在不过度采样的情况下平衡数据集
【发布时间】:2019-04-30 23:20:24
【问题描述】:

我正在尝试平衡我的数据集,但我正在努力寻找正确的方法。让我设置问题。我有一个具有以下类权重的多类数据集:

class     weight
2.0       0.700578
4.0       0.163401
3.0       0.126727
1.0       0.009294

如您所见,数据集非常不平衡。我想做的是获得一个平衡的数据集,其中每个类都用相同的权重表示。

有很多关于但是的问题:

这里是例子:

from imblearn.ensemble import EasyEnsembleClassifier    
eec = EasyEnsembleClassifier(random_state=42, sampling_strategy='not minority', n_estimators=2)
eec.fit(data_for, label_all.loc[data_for.index,'LABEL_O_majority'])
new_data = eec.estimators_samples_

但是,返回的索引都是初始数据的索引,并且重复了n_estimators次。

结果如下:

[array([   0,    1,    2, ..., 1196, 1197, 1198]),
 array([   0,    1,    2, ..., 1196, 1197, 1198])]

最后,很多技术都使用过采样但不想使用它们。仅对于 1 类,我可以容忍过采样,因为它是非常可预测的。 我想知道是否真的 sklearn,或者这个 contrib 包没有这样做的功能。

【问题讨论】:

标签: python machine-learning scikit-learn


【解决方案1】:

根据我的经验,由于我们没有利用全部可用数据,因此每次采样不足都无济于事,而且这种方法可能会导致大量过度拟合。合成少数过采样技术 (SMOTE) 可以很好地处理大多数类型的数据(结构化和非结构化数据,如图像),尽管有时性能可能会很慢。但是它很容易使用并且可以通过 [imblearn][1] 获得。如果您想尝试过采样技术,这篇特别的文章可能会有所帮助:https://medium.com/@adib0073/how-to-use-smote-for-dealing-with-imbalanced-image-dataset-for-solving-classification-problems-3aba7d2b9cad 但是对于上述 cmets 中提到的欠采样,您必须对多数类的数据帧或数组进行切片以匹配少数类的大小

【讨论】:

    【解决方案2】:

    尝试申请iterative-stratification

    关于多标签数据的分层:

    分层抽样是一种抽样方法,考虑到 人口中存在不相交的群体并产生 保持这些组的比例的样本。在 单标签分类任务,分组基于 目标变量的值。在多标签学习任务中, 但是,如果有多个目标变量,则不清楚 可以/应该如何进行分层抽样。这张纸 研究多标签数据上下文中的分层。它 考虑多标签数据的两种分层方法和 凭经验将它们与随机抽样进行比较 数据集并基于许多评估标准。结果 揭示一些关于效用的有趣结论 每种方法都适用于特定类型的多标签数据集。

    【讨论】:

      猜你喜欢
      • 2022-11-15
      • 2023-03-03
      • 2018-05-17
      • 2017-10-28
      • 2017-10-29
      • 2019-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多