WekaのExplorerに分類器を適用する方法は?
-
24-10-2019 - |
質問
たとえば、モデル(J4.8ツリーなど)を構築し、交差検証で評価しました。どうやって このモデルを使用して、新しいデータセットを分類します? 「提供されたテストセット」オプション、「その他のオプション」ウィンドウに「出力予測」をマークし、分類を再度実行するためにデータを含むファイルを設定できます。それは私に必要なものをほぼ生成しますが、それは非常に奇妙なワークフローのようです。また、すべてのモデルを再作成するため、不必要な時間がかかる可能性があります。すでに構築されたモデルで分類を行うためのより簡単な方法はありますか?
解決
MISCパッケージには特別なクラスSerializedClassifierがあり、モデルファイルをパラメーターとして取得し、モックトレーニングフェーズを持っています。
他のヒント
これにはいくつかの方法があります。
最初の1つ
コマンドラインを使用してモデルを保存およびロードできます。-Lおよび-Dコマンドラインスイッチを使用すると、これを行うことができます。
Weka Docsから
-l Sets model input file. In case the filename ends with '.xml', a PMML file is loaded or, if that fails, options are loaded from the XML file. -d Sets model output file. In case the filename ends with '.xml', only the options are saved to the XML file, not the model.
二つ目
また、モデルを生成した後、セカンドクリックを使用してモデルを保存してロードします。見る
三つ目
また、分類子にJavaコードを生成することもできます。このようにして、分類器を保存して再利用します。この手順を実行します。
- その他のオプション]ボタンをクリックします。
- オープンから
、出力ソースコードを選択します。
- 分類子名にもっと意味のある名前を付けます。
これらの手順は、J48分類器のJavaクラスを出力します。クラス以下のWekaj48foririsは、虹彩データセットで使用するためにWekaによって作成されます。それをより便利にするために、それをリファクタリングする必要があるかもしれません。
class WekaJ48ForIris {
public static double classify(Object[] i)
throws Exception {
double p = Double.NaN;
p = WekaJ48ForIris.N26a305890(i);
return p;
}
static double N26a305890(Object []i) {
double p = Double.NaN;
if (i[3] == null) {
p = 0;
} else if (((Double) i[3]).doubleValue() <= 0.6) {
p = 0;
} else if (((Double) i[3]).doubleValue() > 0.6) {
p = WekaJ48ForIris.N18c079301(i);
}
return p;
}
static double N18c079301(Object []i) {
double p = Double.NaN;
if (i[3] == null) {
p = 1;
} else if (((Double) i[3]).doubleValue() <= 1.7) {
p = WekaJ48ForIris.N4544b022(i);
} else if (((Double) i[3]).doubleValue() > 1.7) {
p = 2;
}
return p;
}
static double N4544b022(Object []i) {
double p = Double.NaN;
if (i[2] == null) {
p = 1;
} else if (((Double) i[2]).doubleValue() <= 4.9) {
p = 1;
} else if (((Double) i[2]).doubleValue() > 4.9) {
p = WekaJ48ForIris.N3a0872863(i);
}
return p;
}
static double N3a0872863(Object []i) {
double p = Double.NaN;
if (i[3] == null) {
p = 2;
} else if (((Double) i[3]).doubleValue() <= 1.5) {
p = 2;
} else if (((Double) i[3]).doubleValue() > 1.5) {
p = 1;
}
return p;
}
}
所属していません StackOverflow