PowerPoint プレゼンテーション

EclipseでWekaのAPIを呼び出す
EclipseでWekaのAPIを呼び出す
• Wekaではライブラリーが公開されていて、自
分で作ったプログラムからWekaのAPI(Weka
の製作者が用意したクラスやメソッド等)を呼
び出すことができます
• さっそくEclipseを起動しましょう
EclipseでWekaのAPIを呼び出す
• 適当な名前でJavaプロジェクトを作ります
画像はWekaProjectにしています
EclipseでWekaのAPIを呼び出す
プロジェクトフォルダ
を右クリックし、
ビルド・パス→
ビルドパスの構成と
開いていきます
EclipseでWekaのAPIを呼び出す
• 図のような画面が出るので、外部jarの追加を
クリックします
EclipseでWekaのAPIを呼び出す
• Wekaをインストールしたところにあるweka.jar
を選択して開きます
EclipseでWekaのAPIを呼び出す
• ライブラリーの欄にweka.jarが表示されてい
れば成功です。OKを押して閉じます
EclipseでWekaのAPIを呼び出す
• プロジェクトの欄からもweka.jarが追加されて
いることがわかります
※weka.jarの場所を変更した場合は追加し直す必要があります
サンプルコードの実行
• 参考資料からJ48Test.javaをダウンロードして
実行してみましょう
※作成したball.arffをコピーしてプロジェクト直下に置くこと
実行結果
Ball.csvの解析結果
が出力されました
プログラムの流れ
データの読み込み・クラスの設定
↓
(フィルターの設定)
↓
アルゴルズムの設定
↓
結果の評価
データの読み込み
データを読み込みます。
Instancesは扱うデータの集合の情報をもつクラスです
読み込んだ後にインデックス(何を出力するか)を設定します
DataSource source = new DataSource(“ball.arff");
Instances data = source.getDataSet();
data.setClassIndex(data.numAttributes() - 1);
フィルターの設定
データの属性を減らしたり、値を補正する場合はフィル
ターの設定をします。
今回の例では設定をしていません
アルゴリズムの設定
• フィルターの設定ができたら、アルゴリズムの
指定をしてデータマイニングを行います
• アルゴリズム毎にクラスが用意されています
J48 j48 = new J48();
j48.buildClassifier(data);
結果の評価
• マイニングの具体的な評価を見たい時は
Evaluationクラスを呼び出して出力します
Evaluation eval = new Evaluation(data);
eval.evaluateModel(j48, data);
System.out.println(eval.toSummaryString());
System.out.println(eval.toClassDetailsString());
System.out.println(eval.toMatrixString());
木の図示
• 木のビジュアライズをするTreeVisualizerクラス
を使うことで木の図示も可能です
木の図示
図示する木の情報やノードの設定をしてフレームに載
せます
TreeVisualizer tv = new TreeVisualizer(null, j48.graph(),
new PlaceNode2());
jf.getContentPane().add(tv, BorderLayout.CENTER);
jf.setVisible(true);
tv.fitToScreen();
決定木からルールを取り出す
• 生成した木からルールを抽出し、新しく得られ
たボールのデータを評価してみましょう
J48クラスのtoSourceメソッドを使う
• J48クラスには、Javaコード形式のIF-THEN形式
のルールを出力するtoSourceメソッドがありま
す
String source =j48.toSource(クラス名);
ルールを出力するコード
// 生成するjavaファイル名
String className = "BounceBallRule";
// javaコードの生成
String cl = j48.toSource(className);
// ファイルの生成(同じフォルダに出力)
PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(
new File("src/" + className + ".java"))));
// ファイルにルールを書き込む
pw.println(cl);
// ファイルを閉じる
pw.close();
実行結果
• プログラムを実行するとソースフォルダに
BounceBallRule.javaというのが作成されてい
ます
実行結果
• Eclipse上でも確認できます。
表示されていない場合は、
パッケージを右クリックしてリ
フレッシュを押す
生成されたクラス
class BounceBallRule {
public static double classify(Object[] i)
throws Exception {
double p = Double.NaN;
p = BounceBallRule.N1100d7a0(i);
return p;
}
static double N1100d7a0(Object []i) {
double p = Double.NaN;
if (i[3] == null) {
p = 0;
} else if (i[3].equals("Yes")) {
p = 0;
} else if (i[3].equals("No")) {
p = 1;
}
return p;
}
革製かどうかによる分類
}
ルールクラスの使い方
• 新しいデータの値を引数にして、classifyメソッ
ドを呼び出します
図は、Size:Small, Color:Blue, Weight:Light, Rubber?:No というボールの情報を設定
新しいデータの評価
• さっそく新しいデータを評価してみましょう
このボールは弾まないという結果が得られた