0

J48 を使用して、数値と公称値の両方で構成されるインスタンスを分類しています。私の問題は、プログラム中にどの公称値に遭遇するかわからないことです。そのため、モデルの公称属性のデータを「その場で」更新する必要があります。

たとえば、職業と年齢の 2 つの属性しかなく、次のように実行するとします: OccuptaionAttribute = {}。


入力: [ピアノの先生、22]。

OccuptaionAttribute = {ピアノの先生}。


入力: [学校の先生、30]

OccuptaionAttribute = {ピアノの先生、学校の先生}。


入力: [ピアノの先生、40]

OccuptaionAttribute = {ピアノの先生、学校の先生}。


ここで、以前の属性をコピーし、新しい属性を追加してから、モデルのデータを更新することにより、手動でこれを実行しようとしました。モデルを訓練するとき、それはうまくいきます。

しかし![SW エンジニア、52] などの新しいインスタンスを分類したい場合、OccuptaionAttribute が更新されました。満たすことができず、例外がスローされます。

上記の状況をどのように処理するかを指示できますか?Weka には上記の問題をサポートするメカニズムがありますか?

ありがとう!

4

1 に答える 1

1

トレーニング時に、のような名義属性にプレースホルダー データを追加します__other__。インスタンスを分類しようとする前に、まず名義属性の値が以前に見られたかどうかを確認してください。プレースホルダー値を使用しない場合:

Attribute attribute = instances.attribute("OccuptaionAttribute");
String s = "SW engineer";
int index = attribute.indexOfValue(s);
if (index == -1) {
    index = attribute.indexOfValue("__other__");
}

十分なデータが得られたら、新しい値で再度トレーニングします。

于 2012-12-03T10:33:30.697 に答える