2

WEKA を使用して分類 Java プログラムをトレーニングしています。最初はいくつかのカテゴリ (10 としましょう) があり、システムはそれらの最初のカテゴリで動作し、トレーニングを開始する必要があります。それを行うには...:

String [] categories = {"cat1", "cat2", ..., "cat10"};

public SomeClassifier(String[] categories) {

// Creates a FastVector of attributes.
FastVector attributes = new FastVector(3);

// Add attribute for holding property one.
attributes.addElement(new Attribute(P1_ATTRIBUTE, (FastVector) null));

// Add attribute for holding property two.
attributes.addElement(new Attribute(P2_ATTRIBUTE, (FastVector) null));

// Add values attribute.
FastVector values = new FastVector(categories.length);
for (int i = 0; i < categories.length; i++) {
    values.addElement(categories[i]);
}

attributes.addElement(new Attribute(CATEGORY_ATTRIBUTE, values));

// Create dataset with initial capacity of 25, and set index
Instances myInstances = new Instances(SOME_NAME, attributes, 25);
myInstances.setClassIndex(myInstances.numAttributes() - 1);
}

さて、時間が経ち、トレーニング セット (「cat11」としましょう) に新しいカテゴリを追加したいと思います。これは、既にある程度の成功を収めてトレーニングされています。どうすればこれを達成できますか? WEKA のドキュメントには、「属性が作成されると、変更することはできません」と記載されています。したがって、Instances オブジェクトから属性を取り出し、属性を再作成してから、もう一度挿入することもできます... それとも、すべてが台無しになりますか?

前もって感謝します。

4

1 に答える 1

0

OK、どうやら、ナイーブベイズのこの実装を使用してそのようなことをする方法はありません。これは、分類器を初期化するときに、分類器に追加されるすべてのカテゴリの合計が1である必要があり、分類器がトレーニングされているときに、確率!= 0の新しいカテゴリにより、分類器が合計>1の奇妙な方法で動作するためです。 、分類器は、カテゴリの数の影響を受けてアルゴリズム(条件付き確率と反復の計算)を初期化できます。作成後に新しいものを追加すると、何らかの方法でアルゴリズムを再構築することになります。

だから、それは疑問を残します...時間をかけて新しいカテゴリを導入することを可能にするどの分類メカニズムを使用できますか?

于 2012-08-21T08:37:05.087 に答える