我正在尝试平衡我的数据集,但是我正在努力寻找正确的方法来做到这一点。我来解决问题。我有一个具有以下类权重的多类数据集:
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包没有执行此操作的功能。
答案 0 :(得分:0)
根据我的经验,每次采样均不足以解决问题,因为我们没有利用总的可用数据,这种方法可能会导致很多过拟合现象。虽然少数情况下性能可能很慢,但综合少数族裔过采样技术(SMOTE)在大多数类型的数据(结构化和非结构化数据,例如图像)上都可以很好地工作。但是它很容易使用,可以通过[imblearn] [1]使用。如果您想尝试过采样技术,可以通过这篇特殊文章来帮助您:https://medium.com/@adib0073/how-to-use-smote-for-dealing-with-imbalanced-image-dataset-for-solving-classification-problems-3aba7d2b9cad 但是对于上述评论中提到的欠采样,您必须对多数类的数据帧或数组进行切片,以匹配少数类的大小
答案 1 :(得分:0)
关于多标签数据的分层:
分层抽样是一种考虑了 人口和产品中不相交的群体的存在 保持这些组比例的样本。在 单标签分类任务,根据分组进行分组 目标变量的值。在多标签学习任务中, 但是,在有多个目标变量的地方,尚不清楚 如何/应该执行分层抽样。这篇报告 调查多标签数据上下文中的分层。它 考虑了多标签数据的两种分层方法 从经验上将它们与随机抽样进行比较 数据集并基于许多评估标准。结果 揭示了有关的效用的一些有趣的结论 每种类型的多标签数据集的每种方法。