AIプログラミング

あやめの識別を行ってみる(決定木)

更新日:

あやめの識別を行ってみる(決定木)

機械学習としてあやめの分類を決定木を用いて行っていきます。

あやめの分類とは機械学習として有名な分類方法の試験であり、あやめを構成する4つの属性(がく片の長さ、がく片の幅、花びらの長さ、花びらの幅)をもとに、setosa(ヒオウギアヤメ)、Versicolour(ブルーフラッグ)、Virginicaの3種類のいずれの種類かを判定します。

今回は決定木を用いて3クラス問題の識別を行っていきます。

使用するデータ

使用データ:scikit-learn(datasets.load_iris)
全データ:150件 (訓練用:7割、評価用:3割に分割)
説明変数:4個(がく片の長さ、がく片の幅、花びらの長さ、花びらの幅)
目的変数::3クラス問題(setosa(ヒオウギアヤメ)、Versicolour(ブルーフラッグ)、Virginica)

回帰/識別:識別(3クラス)
識別方法:決定木

ソースコード

ソースコードの詳細説明

各種ライブラリのImport

numpy,pandas,matlibの3種類のデータをインポートしています。

決定木のモデルを描画するためのImport

決定木のモデルを描画するために必要なライブラリをインポートしています。

scikit-learnよりあやめのデータを抽出する

scikit-learnによりあやめのデータを抽出しています。scikit-learnからdatasetsのインポートを行い、load_iris関数で抽出することが出来ます。

このデータは150個分のデータがあり、がく片の長さ、がく片の幅、花びらの長さ、花びらの幅の4つの説明変数を持っています。

それぞれに対して目的変数となるあやめの種類が3種類定義されています。

あやめの種類はsetosa(ヒオウギアヤメ)、Versicolour(ブルーフラッグ)、Virginicaとなります。

あやめのデータの詳細

実際にデータの詳細を表示しています。

あやめのデータ(説明変数)をdataXに格納する

1.pandasデータ

取り出したデータから説明変数となる部分のみを抽出し、dataXという名前のデータフレームに格納しています。

あやめのデータ(目的変数)をdataYに格納する

2.pandasデータ

取り出したデータから目的変数となる部分のみを抽出し、dataYという名前のデータフレームに格納しています。

対応する名前に変換する

3.pandasデータ

先ほど表示したdataYは0,1,2の数値で表示されており、種別が分かりにくいのでリネームしています。nameという関数を作成し、0の場合はSetosa、1の場合はVeriscolour、2の場合はVirginicaと表示するようにしています。

データの分割を行う(訓練用データ 0.7 評価用データ 0.3)

dataXのうち70%を訓練用のデータとして使用します。残り30%は評価用に使用します。同様にdataYも訓練用、評価用に分割します。train_test_split関数を使用することで、ランダムに分割することが出来ます。

線形モデル(決定木)として測定器を作成する

決定木として測定器を作成します。作成した測定器はclfという名前に格納しています。

訓練の実施

訓練を行います。

決定木の描画を行う

4.figure-decisionTree

決定機の描画を行い、その結果を"figure-decisionTree.png"という名前で画像ファイルとして保存しています。図を見ると決定木の深さが5つとなっており若干過学習のようにも見えますが、今回はこのまま行っていきます。

評価の実行

5.pandasデータ

作成したモデルに対して評価を実施します。

どの種類に属するの確率を表示しています。
決定木の場合は1.0となります。決定木の場合、説明変数により分岐していって最終的な予想がどれか一つに該当するためです。

評価の実行(判定)

6.pandasデータ

実際に判定された種別を表示しています。

混同行列の表示

7.pandasデータ

混同行列を行ってみます。混同行列とは縦軸に実際の正解値、横軸に予想の値のクロス表を作成することで、どの程度正解したかどうかを表します。混同行列の結果から、33個が正解し、2個が失敗したことが分かります。

評価の実行(正答率)

実際の結果は95%でした。決定木の深さが5つとなっており過学習ぎみでしたが意外と正答率は高いです。

評価の実行(個々の詳細)

それぞれの個別のデータに対して、予想値と実際の値のデータを比較しています。

今回は決定木を用いて識別問題を行っていきました。過去にはTensorflow + Kerasで違う方法も行っているので興味がある場合はそちらも参照してください。

機械学習-アヤメの分類 (プログラム)

-AIプログラミング
-, ,

Copyright© AI人工知能テクノロジー , 2019 All Rights Reserved.