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-infweka-3-3-6という2つのフォルダがあるの が確認できるはずです.そうしたら,それらをまとめて各自のCNSの領域 (Z:ドライブ)に移動します.以上でセットアップは完了です.


2. 動作確認をしよう

セットアップが終わったら,きちんとWekaが動作するかどうかを確認しま しょう.手順は以下の通りです.

  1. weka-3-3-6の下にある weka.jarをダブルクリック.
  2. Weka GUI Chooserというウィンドウが上がるので Explorerをクリック.
  3. Weka Knowledge Explorerというウィンドウが上がるので Preprocessのタブを選んで(それ以外は選べません),
  4. Open Fileをクリック.
  5. weka-3-3-6\data\weather.arffを選択.
  6. Weka Knowledge ExplorerClassifyタブを選ぶ.
  7. Chooseをクリックするとメソッドのツリーが現れるので, weka->classifiers->trees->j48->j48をクリック.
  8. Startボタンをクリック.
そして右側の領域に以下のような結果が出力されたら,Wekaは正常に動作しています.

=== 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 = no

2. 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 決定木の生成

実際の決定木生成手順は,実は動作確認の際に行った通りです.ここではいくつかの 補足事項を述べておきます.

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,no

3. 参考資料


文責   五十嵐 創