AIプログラミング

3種類のワインの科学的特徴を行ってみる-決定木

更新日:

3種類のワインの科学的特徴を行ってみる(決定木)

機械学習として3種類のワインの科学的特徴を決定木を用いて行っていきます。

3種類のワインの科学的特徴はscikit-leanで用意されているデータセットの一つでアルコール量、色などの13個の説明変数より、3種類のワインを分類する機械学習となります。今回は決定木を用いて3クラス問題の識別を行っていきます。

使用するデータ

使用データ:scikit-learn(load_wine)
全データ:178件 (訓練用:7割、評価用:3割に分割)
説明変数:13個(アルコール量、色・・・)
目的変数::3クラス問題(class_0、class_1、class_2)

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

ソースコード

ソースコードの詳細

各種ライブラリのImport

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

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

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

scikit-leanよりワインのデータをインポートする

scikit-learnによりワインのデータを抽出しています。scikit-learnからdatasetsのインポートを行い、load_wine関数で抽出することが出来ます。
このデータは178個分のデータがあり、アルコール、色などの13個の説明変数を持っています・

それぞれに対して目的変数となるワインの種類が3種類定義されています。
3種類の具体的な名称は不明ですが、class_0、class_1、class_2と定義されています。

データセットの詳細

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

説明変数の表示

1.pandasデータ

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

目的変数の表示

2.pandasデータ

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

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

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

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

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

訓練の実施

訓練を行います。

決定木の描画を行う

figure-decisionTree

決定木の描画を行い、その結果を"figure-decisionTree.png"という名前で画像ファイルとして保存しています。図を見ると決定木の深さが5つとなっています。

評価の実行

3.pandasデータ

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

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

評価の実行(判定)

4.pandasデータ

判定結果を表示しています。

混同行列

5.pandasデータ

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

評価の実行(正答率)

実際の結果は98%でした。非常に高い結果となりました。

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

それぞれの個別のデータに対して、予想値と実際の値のデータを比較しています。OK箇所とNG箇所がどこの部分で発生しているかが分かります。

今回は決定木で試してみましたが、測定器をいろいろ変えて試してみようと思います。

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

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