2003年 春学期 データマイニング法
データマイニングツールボックス "Weka" の使い方
0. はじめに
WekaはニュージーランドWaikato大学で開発されたデータマイニングツール ボックスです.本授業では,このWekaツールボックスの中に含まれる決定木生 成アルゴリズムJ48を用いて演習を行います.以下ではSFCの特別教室の環境を 想定し,必要なセットアップと使用方法について述べます.
Wekaはインターネット上で無料で提供されています.利用に際してはヴァー ジョン1.2以上のJava開発環境が必要です.本マニュアルでは,説明の都合上, Wekaを履修者各自がCNSの自分のディスク領域にインストールして使用するこ とを前提としていますが,知識のある人は,自分のノートPCなどにインストー ルしても構いません.Wekaに関する詳しい情報はすべて,WekaのWebページ を参照して下さい.
1. Wekaのセットアップ
UNIXの操作にある程度慣れている人は、以下で説明する
weka-3-3-6.jarを解凍したものをtar.gz形式で圧縮し直したCNS: /home/soh/DM_tools/weka-3-3-6.tar.gzというファイルを用意しましたので、それを各自のホームディレクトリなどにコピーして解凍して使っても構いません。まず以下から,
weka-3-3-6.jarというファイルをダウンロー ドして下さい.weka-3-3-6.jar
これは一種の圧縮されたファイルなので,まず適当なソフトを使って解凍 する必要があります.特別教室のマシンにはLhaplus(ラプラス)という圧縮・ 解凍ソフトがすでにインストールされていますが,それは使わないで下さい.Lhaplusではどうもうまく解 凍できないようです.面倒ですが,Lhasa(ラサ)などの他のソフトを各自一時 的にインストールして解凍を行って下さい.特別教室では恐らく
C:ドライブには新たにアプリケーションをインストールできな いと思います.D:,Y:,V:などの, 作業用に用意されているドライブに一時的にインストールし,要らなくなった ら消しておけば良いでしょう.Lhasaは例えばVector からダウンロードできます.また,NetscapeNavigatorでダウンロードしてLhasaで解凍しようとすると 不都合が生じるという報告が以前にありました.その場合はInternetExplorer を使うか,他の解凍ソフトを使って下さい.
weka-3-3-6.jarが無事に解凍できたら,Meta-infとweka-3-3-6という2つのフォルダがあるの が確認できるはずです.そうしたら,それらをまとめて各自のCNSの領域 (Z:ドライブ)に移動します.以上でセットアップは完了です.
2. 動作確認をしよう
セットアップが終わったら,きちんとWekaが動作するかどうかを確認しま しょう.手順は以下の通りです.
そして右側の領域に以下のような結果が出力されたら,Wekaは正常に動作しています.
weka-3-3-6の下にあるweka.jarをダブルクリック.Weka GUI Chooserというウィンドウが上がるのでExplorerをクリック.Weka Knowledge Explorerというウィンドウが上がるのでPreprocessのタブを選んで(それ以外は選べません),Open Fileをクリック.weka-3-3-6\data\weather.arffを選択.Weka Knowledge ExplorerのClassifyタブを選ぶ.Chooseをクリックするとメソッドのツリーが現れるので,weka->classifiers->trees->j48->j48をクリック.Startボタンをクリック.=== Run information === Scheme: weka.classifiers.trees.j48.J48 -C 0.25 -M 2 Relation: weather Instances: 14 Attributes: 5 outlook temperature humidity windy play Test mode: 10-fold cross-validation === Classifier model (full training set) === J48 pruned tree ------------------ outlook = sunny | humidity <= 75: yes (2.0) | humidity > 75: no (3.0) outlook = overcast: yes (4.0) outlook = rainy | windy = TRUE: no (2.0) | windy = FALSE: yes (3.0) Number of Leaves : 5 Size of the tree : 8 Time taken to build model: 0.05 seconds === Stratified cross-validation === === Summary === Correctly Classified Instances 9 64.2857 % Incorrectly Classified Instances 5 35.7143 % Kappa statistic 0.186 Mean absolute error 0.2857 Root mean squared error 0.4818 Relative absolute error 61.5385 % Root relative squared error 100.4843 % Total Number of Instances 14 === Detailed Accuracy By Class === TP Rate FP Rate Precision Recall F-Measure Class 0.778 0.6 0.7 0.778 0.737 yes 0.4 0.222 0.5 0.4 0.444 no === Confusion Matrix === a b <-- classified as 7 2 | a = yes 3 2 | b = no2. Wekaの使い方
Wekaでは,授業で勉強した情報量基準 に基づく決定木生成アルゴリズムC4.5を多少改良したJ48というアルゴリズムが使わ れています.weka-3-3-6\data\にいくつかのサンプルファイルが 用意されています.ここではその中から,動作確認の際にも用いた weather.arffを例として,Wekaの実際の使い方を簡単に説明します.
2.1 天気とスポーツの例
weather.arffが表すのは,その日の天候,温度,湿度などを属性とし, その日何かのスポーツ(テニスやゴルフなどと考えればよいでしょう)をやるべきかそうでないかと いうことについてのデータです.その内容を表の形式でまとめると以下のようになります.
天候とスポーツについてのサンプルデータ:weather 天候(outlook) 気温(temperature) 湿度(humidity,%) 強風(windy) 開催(play) sunny 85 85 FALSE no sunny 80 90 TRUE no overcast 83 86 FALSE yes rainy 70 96 FALSE yes rainy 68 80 FALSE yes rainy 65 70 TRUE no overcast 64 65 TRUE yes sunny 72 95 FALSE no sunny 69 70 FALSE yes rainy 75 80 FALSE yes sunny 75 70 TRUE yes overcast 72 90 TRUE yes overcast 81 75 FALSE yes rainy 71 91 TRUE no
以下に各属性の意味を示します。かっこ内はとり得る値を意味します。
outlook{sunny, overcast, rainy}   :   その日の天候を sunny (晴れ), overcast (曇り), rainy (雨)の3種類で表わす。
temperature   :   その日の気温を華氏で表わす。
humidity   :   その日の湿度を % で表わす。
windy{TRUE, FALSE}   :   その日が強風である( TRUE )かそうでない( FALSE )かを表わす。
play{yes, no}   :   その日スポーツをする( yes )かしない( no )かを表わす。この場合、この 属性が決定木をつくる際の クラス に なります。
2.2 入力ファイルを作る
このようなデータからWekaを用いて決定木をつくる場合,あらかじめWekaが受け付けることの できる入力ファイルの形式に整える必要があります.Wekaが入力として受け付けることができる のは,arffというファイル形式です(実際は後に述べるように, CSVファイルでも自動的にarffに変換してくれるので,そのまま使うことができます).上に示し た表の内容をarff形式で表現したものが,weather.arffというわけ です.以下にその内容を示します.
------ ここから ------------------------------
@relation weather
@attribute outlook {sunny, overcast, rainy}
@attribute temperature real
@attribute humidity real
@attribute windy {TRUE, FALSE}
@attribute play {yes, no}
@data
sunny,85,85,FALSE,no
sunny,80,90,TRUE,no
overcast,83,86,FALSE,yes
rainy,70,96,FALSE,yes
rainy,68,80,FALSE,yes
rainy,65,70,TRUE,no
overcast,64,65,TRUE,yes
sunny,72,95,FALSE,no
sunny,69,70,FALSE,yes
rainy,75,80,FALSE,yes
sunny,75,70,TRUE,yes
overcast,72,90,TRUE,yes
overcast,81,75,FALSE,yes
rainy,71,91,TRUE,no
------ ここまで ------------------------------
まず、入力ファイルの最初に、そのデータの名前を書きます。ここでは weather という名前が つけられています。書き方は以下のようにします。
@relation weather
次に、このデータの中で使われる属性を宣言します。属性には大きく分けて、 名義属性(nominal attribute)と 数値属性(numeric attribute)の2つが あります。名義属性とは例えば上の例の天候(outlook)のように、とり得る値 があらかじめいくつかに決まっている属性のことです。それに対し、数値属性 とは、値が数値の連続量となる属性のことで、上の例の気温(temperature)、 湿度(humidity)がこれに相当します。
名義属性を宣言するときは、属性名の後に、とり得る値を中かっこで囲んで指定 します。具体的には以下のようにします。
@attribute outlook {sunny, overcast, rainy}
数値属性を宣言するときは、とり得る数値の種類を指定します。例えば実数ならば、 以下のようにします。( WEKA では、整数も実数として扱われます)
@attribute temperature real
属性の宣言は以上のようにします。 WEKA の標準設定では、 最後に宣言された属性が自動的にクラスとして 認識されます 。
以上のようにしてすべての属性を宣言し終わったら、今度は実際のデータを記述し ます。データを記述するときは最初に @data というタグをつけます。実際のデータ は、属性値を、宣言した順番にカンマ区切りで並べます。欠損値は ? で表します。 最後に、これは WEKA で扱うファイル共通の約束事として、 % で始まる行はコメントとして扱われます。 データの記述は、具体的には以下のようになります。
@data
sunny,85,85,FALSE,no
sunny,80,90,TRUE,no
overcast,83,86,FALSE,yes
rainy,70,96,FALSE,yes
2.3 決定木の生成
実際の決定木生成手順は,実は動作確認の際に行った通りです.ここではいくつかの 補足事項を述べておきます.
ChooseをクリックしてJ48を選んだ際,J48 -C o.25 -M 2と表示された部分をクリックすることで, 様々なオプションを設定することが可能です.TestOptions中で,結果の検定に関するオプションを選ぶことができます. 通常はCross Validationか、Percentage splitで良いでしょう.Startボタンの上のプルダウンメニューから,クラス属性を選択できます.- 決定木を生成後,
Result list (right-click for options)のところを 右クリックし,メニューからVisualize treeを選ぶことにより,得られた 決定木を木の形式で可視化することができます.動作確認でも用いた 2.4 出力の見方
weather.arffを例として,出力された決定木の見方を説明 します.表示されるのは,決定木生成アルゴリズム J48 によって作られた、 枝刈り後の木( J48 pruned tree)です。 (枝刈りについてはまだ授業で詳しく扱っていないので、ここでは大まかに、 得られた決定木を、その精度を落とさずに小さくすることと理解しておいて 下さい)この決定木は以下のように解釈します。
天候が晴れで、
    湿度が 75% 以下ならば、yes (スポーツをする)
    湿度が 75% より大きいならば、no (スポーツをしない)
天候が曇りならば、yes (スポーツをする)
天候が雨で、
    強風ならば、no (スポーツをしない)
    強風でなければ、yes (スポーツをする)
木の一番末端の部分、クラスのラベル(この場合 yes か no)が割り当てられている 部分を木の葉と呼びます。各葉のところで、 クラスのとなりに書かれている数字は、その葉に到達した データの数を表わします。この数字が少数になっているのは、欠損値 を扱うためのアルゴリズムの都合によります。
木の下に表示されているのは、葉の数(Number of Leaves)と木の大きさ(Size of the tree) です。木の大きさとは、木に含まれるノードの総数のことです。ノードとは、葉、 および木の分岐点(節)を意味します。
その次に表示されるのは、生成された木の評価 (Error on training data)です。 Correctly Classified Instances および Incorrectly Classified Instances とは、それぞれその木 によって正しく分類されたデータの数、正しく 分類されなかったデータの数を表わします。 Mean absolute error およ び Root mean squared error とは、どちらも木の予測精度 を表わす数値と考えて下さい。この値が小さいほど、正確な木であるこ とを意味します。 Total Number of Instances とは、木を つくるのに使われたデータの数です。
その次に表示される Confusion Matrix とは、 yes , no いずれかのクラスに属するデータのうち、いくつのデータが正しく分類 ( yes なら yes , no なら no に)され、いくつのデータが間違って分類( 本来 yes なのに no に , no なのに yes に)されたかを行列形式で表わしたものです。例え ばこの例では、クラスが yes のデータ9件のうち、9件すべてが yes に(正しく) 分類され、0件が no に(間違って)分類され、クラスが no のデータ5件のうち、 0件が yes に(間違って)分類され、5件すべてが no に(正しく)分類されたことを 表わします。
その次に表示されるのは 10-fold による cross-validation (交差検定)の結果です。 WEKA では、テストファイルを与えない場合は自動的に 10-fold の交差検定を行い ます。この例では、14件のデータのうち、30%以上に当たる5件のデータが 交差検定の結果誤って分類されて(Incorrectly Classified)おり、作 られた木が非常に楽観的(optimistic)であることが読み取れます。このことは、その 下の Confusion Matrix でも確認することができます。
2.5 オプション
決定木生成の際に選択できる様々オプションの詳細については,本マニュアル最後に示した参考資料を参照して下さい. 本マニュアルでも順次紹介していく予定です.
2.6 CSVファイルの扱い
上に述べたように,Wekaの受け付ける入力ファイルの形式はarffですが,CSVファイルをarffに変換する機能が備わって いるため,実際はCSVファイルでも問題なく扱うことができます.例えば以下のようなCSVファイル(中身はweather.arff と同じ)をWekaに読み込ませようとすると,"形式がarffではない"というエラーが出ますが,その際,右側の
Use Converterボタンを押し,その後出てくるダイアログでOKを選べば良いのです.CSVファイルの1行目の記述が,属性名とみなされます.outlook,temperature,humidity,windy,play sunny,85,85,FALSE,no sunny,80,90,TRUE,no overcast,83,86,FALSE,yes rainy,70,96,FALSE,yes rainy,68,80,FALSE,yes rainy,65,70,TRUE,no overcast,64,65,TRUE,yes sunny,72,95,FALSE,no sunny,69,70,FALSE,yes rainy,75,80,FALSE,yes sunny,75,70,TRUE,yes overcast,72,90,TRUE,yes overcast,81,75,FALSE,yes rainy,71,91,TRUE,no3. 参考資料
- Wekaのホームページ
- weka-3-3-6ディレクトリ中にあるTutorial.pdf, Explorer.pdf. Tutorial.pdfの方は、下に紹介した著作の中の1章です。少し古いので、ここで説明している現在のヴァージョンとは多少雰囲気が違う点があるかもしれません。また特にGUIに関する説明がExplorer.pdfに書かれています。
- 古川康一、尾崎知伸、植野研 著、「帰納論理プログラミング」、共立出版、2001.(第6章が"決定木の学習"にあてられています)
- Ian H. Witten and Eibe Frank, "Data Mining: Practical Machine Learning Tools and Techniques with Java Implementations," Morgan Kaufmann Publishers, 2000. (Wekaの作者の著作で、特にWekaについて書かれた部分がTutorial.pdfとしてweka-3-3-6ディレクトリに含まれています)
文責   五十嵐 創