0

検索クエリを {Artist, Actor, Politician, Athlete, Facility, Geo, Definition, QA} のいずれかに分類する分類子を作成しました。2 つの csv ファイルがあります。1 つは分類子のトレーニング用 (300 クエリを含む) で、もう 1 つは分類子のテスト用 (現在約 200 クエリを含む) です。weka knowledgeflow を使用して分類子をトレーニング/評価するためにトレーニングセットとテストセットを使用すると、ほとんどのクラスでかなりの精度が得られます。Weka ナレッジ フロー トレーニング/テスト状況のセットアップ:

Weka トレーニング/テストのセットアップ

トレーニングの後、MultiLayer Perceptron 分類子をナレッジフローから classifier.model に保存しました。これを Java コードで使用してクエリを分類しました。

このモデルを Java コードで逆シリアル化し、それを使用してテスト セット CSV ファイルのすべてのクエリを分類すると (逆シリアル化された分類子で distributionForInstance() メソッドを使用)、ナレッジフローですべての「Geo」クエリが「施設」として分類されます。クエリとすべての「QA」クエリを「定義」クエリとして。ClassifierPerformanceEvaluator は、'Geo' クエリと 'QA' クエリのスコアが非常に高く、テスト クエリが同じである (同じ CSV ファイルが使用された) 混同行列を示したので、これには少し驚きました。distributionForInstance() メソッドを使用する他のすべてのクエリ分類は正常に機能しているように見えるため、ナレッジフローの混同行列を見て予想される動作を示しています。

私が考えることができる 1 つのことは次のとおりです。testing-CSV ファイルには、他の属性の中でも、すべて大文字のケースで多くの公称値属性が含まれています。Javaコードで分類する前にインスタンスのすべての属性の値を出力すると、これらの値は小文字に変換されているようです(DataSource.getDataSet()メソッドはこのように動作するようです)。これらの属性の大文字と小文字が区別されていることが原因で、testing-CSV ファイルの一部のインスタンスが異なる方法で分類される可能性がありますか? 公称値属性は大文字と小文字を区別するという Weka 仕様を読みました。ただし、weka は、これらの値が公称属性に対して事前定義されていないという例外をスローするため、Java ファイルでこれらの値を大文字に変更します。

4

1 に答える 1

1

Weka は、csv を解釈するために、weka コードと同じクラスをナレッジ フローで使用している可能性があります。これが、微調整なしで機能し (一致するデータセット (Instancesオブジェクト) を生成)、何かを変更すると失敗する理由です: 項目が一致しなくなります。つまり、weka は入力文字列の大文字と小文字を一貫して処理しており、それを変更する必要はありません。

Error on Test Dataナレッジ フロー出力の値ではなく、値を見ていることを確認してくださいError on Training Data。これらの正確な例を使用してモデルを構築した場合、2 番目の値は人為的に高くなるからです。分類器が両方の場所で同じように動作している可能性がありますが、異なる統計を見ています。

于 2012-05-25T17:13:57.180 に答える