我已经在我的数据集上运行了一个InfoGain评估,Ranker的阈值为0.1。
我通过GUI的输出说:
Search Method:
Attribute ranking.
Threshold for discarding attributes: 0.1
Attribute Evaluator (supervised, Class (nominal): 23 class):
Information Gain Ranking Filter
Ranked attributes:
0.141 2 nr_visits
Selected attributes: 2 : 1
在我的java实现中,我做同样的事情:
Ranker ranker = new Ranker();
ranker.setGenerateRanking(true);
ranker.setThreshold(0.1);
AttributeSelection attsel = new AttributeSelection();
InfoGainAttributeEval eval = new InfoGainAttributeEval();
attsel.setEvaluator(eval);
attsel.setSearch(ranker);
attsel.SelectAttributes(instances);
int[] ranked_attr = attsel.selectedAttributes();
double[][] rawscores = attsel.rankedAttributes();
在哪里得到类似的输出:
[1, 21]
(1
为nr_visits
功能,而21
为另一个)21
的任何条目。它具有1
,然后是得分低于我的阈值的另一个功能。什么给了?是否有一个或两个选定的功能?这是weka 3.8.4中的错误吗?
感谢Eibe在邮件列表上:
AFAIK,selectedAttributes()返回的索引集包括类属性的索引。我假设数据中的属性22是类属性。 class属性没有分数,因为它是我们试图预测的属性。
因为是,21
确实是我的类索引,该类索引在代码中从零开始,在GUI中从1开始,这就是为什么我没有立即注意到。