Я использую jRip для классификации немаркированных экземпляров. Помимо класса, я хочу знать, какое правило было инициировано. С помощью методов cover() я знаю, если экземпляр включен в правило, которое, похоже, работает. Но когда я хочу напечатать правило, читаемое человеком, используя метод toString (classAttr), он показывает неправильный результат. Мой кодJRip.RipperRule.toString (classAttr) дает неправильный результат
FastVector ruleset = rip.getRuleset();
for (int j = 0; j < ruleset.size(); j++) {
JRip.RipperRule rule = (JRip.RipperRule) ruleset.elementAt(j);
System.out.println("consequent of the rule: " + rule.getConsequent());
System.out.println("rule:" + rule.toString(unlabeled.classAttribute()) + " /// covers = " + rule.covers(unlabeled.instance(i)));
}
Когда я итерацию по набору правил, используя код выше, я получаю:
====================================================================
consequent of the rule: 0.0
rule:(humidity = high) and (outlook = sunny) => play=yes /// covers = false
====================================================================
consequent of the rule: 0.0
rule:(outlook = rainy) and (windy = TRUE) => play=yes /// covers = false
====================================================================
consequent of the rule: 1.0
rule: => play=no /// covers = true
При использовании:
System.out.println(rip.toString());
я получаю (что правильно):
(humidity = high) and (outlook = sunny) => play=no (3.0/0.0)
(outlook = rainy) and (windy = TRUE) => play=no (2.0/0.0)
=> play=yes (9.0/0.0)
Проблема в том, что в первом журнале i t говорит play => yes, когда он на самом деле играет => нет.
Я использую data.nominal.arff dataset (поставляется с Weka).