次のデータセットweather.nominal.arffがあります
@relation weather.symbolic
@attribute outlook {sunny, overcast, rainy}
@attribute temperature {hot, mild, cool}
@attribute humidity {high, normal}
@attribute windy {TRUE, FALSE}
@attribute play {yes, no}
@data
sunny,hot,high,FALSE,no
sunny,hot,high,TRUE,no
overcast,hot,high,FALSE,yes
rainy,mild,high,FALSE,yes
rainy,cool,normal,FALSE,yes
rainy,cool,normal,TRUE,no
overcast,cool,normal,TRUE,yes
sunny,mild,high,FALSE,no
sunny,cool,normal,FALSE,yes
rainy,mild,normal,FALSE,yes
sunny,mild,normal,TRUE,yes
overcast,mild,high,TRUE,yes
overcast,hot,normal,FALSE,yes
rainy,mild,high,TRUE,no
以下のような簡単なプログラムを書きました。
if (data.classIndex() == -1)
data.setClassIndex(4);
J48 classifier = new J48();
Evaluation eval = new Evaluation(data);
eval.crossValidateModel(classifier, data, 10, new Random(1));
System.out.println(eval.toMatrixString());
次の結果が得られました。
=== Confusion Matrix ===
a b <-- classified as
0 5 | a = no
0 9 | b = yes
Weka GUI で同じ weather.nominal データ セットを使用すると、次の結果が得られます。
=== Confusion Matrix ===
a b <-- classified as
9 0 | a = yes
5 0 | b = no
Weka GUI によって生成された結果を取得するには、プログラムにどのような変更を加える必要がありますか? 結果の混同行列では、値が交差しています。
更新 arffファイルについて言及しましたが、データベースに同じ値を保存しているため、データベースから同じ値を取得しています。この問題は、通常のarffファイルを使用した場合ではなく、データベースを使用した場合にのみ発生します。
データベースから値をロードするコード。
InstanceQuery query = new InstanceQuery();
query.setUsername("postgres");
query.setPassword("*****");
query.setQuery("SELECT * from weather");
Instances data = query.retrieveInstances();