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 というボールの情報を設定 新しいデータの評価 • さっそく新しいデータを評価してみましょう このボールは弾まないという結果が得られた
© Copyright 2024 ExpyDoc