随机抽取 Weka 中的属性子集(Java)

Randomly sample a subset of attributes in Weka(Java)

我正在使用 Weka API 并且我想 select 来自 Instances 对象的属性的随机子集。我知道 RandomSubset class 存在,它应该从 Instances 对象中选择属性的随机子集。但是,这个功能似乎不起作用。例如,在下面的代码中,我告诉 RandomSubset 对象随机 select 7 个属性,并使用过滤器 class 来过滤我的 instances 对象,它最初有 24 个属性。我希望过滤操作的输出给我一个只有 7 个随机 selected 属性的新实例对象,但这并没有发生。相反,每次我 运行 代码我得到相同的 12 selected 属性告诉我 RandomSubset 根本不是随机的!

RandomSubset randomSubset = new RandomSubset();
randomSubset.setInputFormat(instances); // set input format
randomSubset.setNumAttributes(7); // select random number of attributes to pick
Instances sub = Filter.useFilter(instances,randomSubset); // pass randomSubset to filter object
System.out.println(sub) // contains 12 attributes instead of 7

如何让这个方法起作用?这是一个错误吗?

谢谢, 绝望的程序员!

setInputFormat 调用必须在 所有选项都设置之后发生。这是过滤器将根据当前设置的选项确定数据结构等的地方。在该调用之后设置的任何选项都将被忽略。将 setInputFormat 方法视为用户界面中的 Apply 按钮。