1

私は、Weka API 用にある種の Hello World の例を使用しています。データベースからインスタンスを作成しているときに問題を発見しました。 状況: 2 つのテーブル trainset(id, value, classValue) と testset(id, value, classValue) を持つデータベースがあります。

各テーブルには、100% 正しく分類されるサンプル データの 10 行が含まれています。trainset の最初の行は (1, 5, "low") で、testset の最初の行は (1, 15, "high") です。

Weka がInstancesオブジェクトを作成すると、クラスの Attribute オブジェクトも自動的に作成されるようです。

train = query.retrieveInstances();
train.setClassIndex(train.numAttributes() - 1);

最初のセットのクラス属性は

@attribute classValue {low,high}

...そして2番目に

@attribute classValue {high,low}

評価を実行すると表示される

Incorrectly Classified Instances        10              100      %

これは、classValue 属性が混同されていることが原因です。

クラス属性がどのように見えるかを前もって伝える方法はありますか、または何らかの方法でマッピングを変更できますか? 私はすでに試しました

FastVector fvClassVal = new FastVector(2);
fvClassVal.addElement("low");
fvClassVal.addElement("high");
Attribute classAttribute = new Attribute("classValue", fvClassVal);
test.setClass(classAttribute);

しかし、それはうまくいかないようです.classIndexを知りたがっていて、以前の属性を上書きします.

4

2 に答える 2

0

私は以前に同じ質問をして答え ました。データベースにクエリを実行する前に、正しいArffヘッダーを作成して使用する必要があります。

于 2013-02-07T15:49:57.320 に答える
0

ヒントをありがとう。現在、エレガントなソリューションはないようです。テスト データにトレーニング データに含まれるすべてのクラスが含まれていると想定できる場合は、クエリを次のように変更できます。

SELECT 値、classValue FROM trainset ORDER BY classValue

これは、コードの変更が少ないソリューションですが、パフォーマンスが低下します:/

于 2013-03-05T08:47:54.193 に答える