1

次のデータセット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();

データベース テーブルのイメージ

4

0 に答える 0