Upload
makala
View
197
Download
0
Embed Size (px)
DESCRIPTION
Eclipse で Weka の API を呼び出す. Eclipse で Weka の API を呼び出す. Weka ではライブラリーが公開されていて、自分 で作ったプログラムから Weka の API ( Weka の製作者が用意したクラスやメソッド等)を呼び出すことができます さっそく Eclipse を起動しましょう. Eclipse で Weka の API を呼び出す. 適当な名前で Java プロジェクトを作ります 画像は WekaProject にしています. Eclipse で Weka の API を呼び出す. プロジェクトフォルダを右クリックし、 - PowerPoint PPT Presentation
Citation preview
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 というボールの情報を設定
新しいデータの評価• さっそく新しいデータを評価してみましょう
このボールは弾まないという結果が得られた