Weka Resample用于平衡二进制数据集中的实例

时间:2014-11-16 16:00:14

标签: weka

我只使用了Weka几个星期,但我对它有多棒感到非常震惊!

但我有一个问题,我有一个目标列的数据集,该列为True或False。

我的数据集中的6709个实例为True

25318个实例是假的。

我想随机添加我的True实例的重复项,以生成一个25318 True和25318 False的新数据集。

我能找到的唯一过滤器就是受监督的重采样过滤器,但是我无法理解应该使用哪些参数。

(可能有更好的过滤器来做我想要的事情)

我在这些参数方面取得了一些成功

biasToUniformClass = 1.0
invertSelection = False
noReplacement = False
randomSeed = 1
sampleSizePercent = 157.5 (a magic number I've arrived at by trial and error)

这会产生25277 True和25165 False。不完全是我想要的,但非常接近。

问题在于我无法弄清楚如何获得神奇数字。我也没有得到我真正想要的实例数量。

为此目的是否有更好的过滤器? 如果没有,有没有办法计算sampleSizePercent幻数?

非常感谢任何帮助:)

补充问题,我最好在我的布尔列上运行NominalToBinary以确保它们是二进制的吗?我正在使用NaiveBayes分类器(目前),我没有任何遗漏的实例。

杰森

1 个答案:

答案 0 :(得分:2)

我认为这个问题的棘手部分是使用重采样过滤器获得完美的平衡。这是因为,正如在说明中所述,它'使用替换采样或无替换'生成数据集的随机子样本。如果这些案例是随机抽取的,则无法保证您在两个班级之间获得相同的衡量标准。

对于幻数,这将与应用过滤器时您希望拥有的案例总数相关联。在你的情况下,它将是50636而不是32027.在这种情况下,你的幻数将是50636/32027 = 1.581。但是,如上所述,您可能无法完全匹配真假案例。

如果您确实需要精确的数字,可以使用自己喜欢的电子表格并预处理数据。一种可能的方法是将真实案例随机化(在单独的列中),对所有案例进行排序和复制,直到该数字与假的案例匹配为止。它不是一个自动化解决方案,解决方案不在Weka之外,但我之前使用过这种方法并且合理地快速完成工作。

希望这有帮助!