2015年8月19日水曜日

Wekaを使ったお手軽機械学習 モデル作成編

データアナリティクス・グループ(DAG)の新村です。

機械学習を使って分類を可視化するのもいいですが、真価を発揮させるには、他の業務システムなどと連携させて、予測から行動を自動化させることが肝心です。今回は、ニュージーランドのワイカト大学が開発した機械学習ソフトウェアの"Weka"を使って、この一連の流れを作っていきます。


■ これからやること


機械学習でモデルを作成して、Javaのプログラムに組み込むまでの、情報活用する際の一連の流れを本ブログでは説明していきたいと思います。
  1. モデルの作成(今回の内容)
  2. モデルの検証(今回の内容)
  3. Javaプログラムへのモデルの組み込み
今回の記事では、モデルの作成とモデルの検証を行っていきたいと思います。


■ 執筆時のシステム仕様


以下が、今回利用したソフトウェアのバージョンです。WekaのRequirements(動作仕様)にJava8は含まれておりませんが、手元の環境にJava8がセットアップされており、今回の検証では問題なく動いたので、そのまま利用しています。
  • JavaSE Runtime Environment 1.8.0_20-b26 
  • Weka 3.6.12(ライセンスはGNU General Public Licenseです)


■ 分析の概要


今回は仕組み作りが要点となるため、分析内容は簡単なものを選択しました。

カリフォルニア大学アーバイン校が提供している、UCI Machine Learning Repositoryの中から、アヤメの分類に関するデータセットを利用します。含まれる属性は、アヤメの種別(3種類)と、sepal (がく片) とpetal (花弁) の長さと幅です。

このデータを使って、がく片と花弁から、アヤメの種別を判定する仕組みを構築します。

インストールしたWekaの中に、同データが含まれているので、ダウンロードする必要はありません。


■ モデル作成


1. Wekaのインストールと起動

Wekaのダウンロードサイトから自分のOSに該当するバージョンのWeka安定版(Stable)をダウンロードしてインストールします。インストールが完了したら、スタートメニューからWekaを起動します。ランチャーが起動するので、「エクスプローラー」を選択します。



2. データの読込

エクスプローラーが起動されたら、分析に利用するデータを読み込ませます。[ファイルを開く]を選択すると、エクスプローラーが開くので、<Wekaインストールディレクトリ>\data\ iris.arff を選択します。



3. 分類の実施

いよいよ機械学習を使って分類を実施します。データアナリティクス・グループでは、スタンフォード大学のMOOC”Machine Learning”を全員が受講していることもあるので、今回は、同講座で解説している手法を採用します。

[分類]タブに移動します。今回は「ロジスティック回帰」という分類手法を使ってデータの分類を行っていくので、Classifiers > functions > Logistics を分類器に指定します。
次にテストの設定を行います。トレーニングデータとテストデータは一般的に7:3で分割するので、テストオプションを「パーセント分割」にして、値を70%に指定します。

最後に、予測対象となる属性(目的変数)に class を選択してから、[開始]を押します。



4. 分析結果の確認

分析器出力にモデルの内容と、テストの実行結果が表示されます。

“Coefficients”は、簡単に言えば各属性の重要度(θ)です。ゼロに近いほど重要性は低くなります。

“Odds Ratios”は、分布を示したもので、ゼロに近いほど正確に分類されています。


テスト実行結果は、以下のように表示されます。

“Summary”の”Correctly…”と”Incorrectly…”が、トレーニングセット(先頭70%のデータ)を使って作成されたモデルに対する、テストセット(残り30%)のデータの正誤率です。


まずまずの分析結果が出ており、このまま使えそうな感じですが、とりあえず、モデルの修正を行っていきたいと思います。


■ モデルの修正


スタンフォード大学のMachine Learningの授業によれば、モデルが期待する成果を上げていない場合は、以下のどれかを見直す必要があるといいます(Week6 - Evaluating a Learning Algorithm
  • より多くのトレーニングセットを利用する
  • アトリビュート(属性)を減らす
  • アトリビュート(属性)を追加する
  • アトリビュート(属性)を多項化したものを追加する(x1^2, x2^2, x1*x2など)
今回は、「アトリビュートを減らす」方法を取っていきたいと思います。

Weka Explorerの[ビジュアル化]タブを開いて、各属性の関係性を確認します。

sepalwidth(がく片の幅)とsepallength(がく片の長さ)を使ったものについては、水色の点と赤色の点が混在している領域が多く、高い精度での分類が難しそうなので、分類に利用する際のアトリビュートから外して、再度、モデルを作ります。


以下が修正後のテスト結果です。テスト結果の改善は見られませんでした。

元々きれいに分類されたデータのため分類の精度向上は実現できませんでしたが、属性が減ることで計算コストが大幅に削減されるので、まったく意味がなかったわけでもありません。



以上で、分析及びモデルのチューニングは完了です。

[分類]タブを開いて、結果リストを右クリックして、「モデル保存」を行います。



次回の記事では、作成したモデルをJavaプログラムに組み込んでいきます。

0 件のコメント:

コメントを投稿