今日は新しいデータセット、アイリス・データセットについて学びましょう。このデータセットは、花の様々な性質を扱い、その性質によって花を分類するという、とても興味深く楽しいデータセットです。
1. モジュールのインポート
プロジェクトの最初のステップは、numpy, pandas, matplotlib などの基本的なモジュールをインポートすることです。
1
2
3
|
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
|
2. Iris データセットのロードと準備
データをロードするために、Kaggleからデータセットをダウンロードします。データセットはこちらからダウンロードできますが、ファイルがコードファイルと同じディレクトリにあることを確認してください。
また、データに対してスライス操作を行うことで、データとラベルを分離する予定です。
1
2
3
|
data = pd.read_csv( 'Iris.csv' )
data_points = data.iloc[:, 1 : 5 ]
labels = data.iloc[:, 5 ]
|
3. データをテスト用と学習用に分割する
MLモデルを学習する前に、まずsklearnの train_test_split
関数を使ってデータをテスト用と学習用に分割する必要があります。
1
2
|
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(data_points,labels,test_size = 0.2 )
|
4. データの正規化・標準化
MLモデリングやデータ処理を行う前に、データの正規化を行う必要がある。
1
2
3
4
5
6
|
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import cross_val_score
Standard_obj = StandardScaler()
Standard_obj.fit(x_train) x_train_std = Standard_obj.transform(x_train)
x_test_std = Standard_obj.transform(x_test)
|
5. 分類MLモデルの適用
データが準備され、様々なMLモデルに適用する準備ができたので、様々な分類モデルの効率性をテストし比較します
5.1 SVM (サポートベクターマシン)
最初にテストするモデルはSVM分類器です。そのためのコードを以下に示します。
1
2
3
4
5
|
from sklearn.svm import SVC
svm = SVC(kernel = 'rbf' , random_state = 0 , gamma = . 10 , C = 1.0 )
svm.fit(x_train_std, y_train) print ( 'Training data accuracy {:.2f}' . format (svm.score(x_train_std, y_train) * 100 ))
print ( 'Testing data accuracy {:.2f}' . format (svm.score(x_test_std, y_test) * 100 ))
|
実行に成功した場合、分類器の学習精度は約97%、テスト精度は約93%であり、非常に良い結果でした。
この記事もチェック:Pythonによるサポートベクターマシンを実装してみた
5.2 KNN (K-Nearest Neighbors)
KNNアルゴリズムは,MLの世界では最も基本的でシンプルな分類モデルです.これを直接実行するコードは以下の通りです.
1
2
3
4
5
|
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors = 7 , p = 2 , metric = 'minkowski' )
knn.fit(x_train_std,y_train) print ( 'Training data accuracy {:.2f}' . format (knn.score(x_train_std, y_train) * 100 ))
print ( 'Testing data accuracy {:.2f}' . format (knn.score(x_test_std, y_test) * 100 ))
|
この場合のテスト精度は約80%で、他のモデルと比較すると低いですが、このモデルは非常に基本的で、いくつかの制限があるため、正当化されます。
5.3 決定木
次に,シンプルでありながら複雑なMLモデルの一つである決定木モデルを実装し ます.そのコードは以下の通りです.
1
2
3
4
5
|
from sklearn import tree
decision_tree = tree.DecisionTreeClassifier(criterion = 'gini' )
decision_tree.fit(x_train_std, y_train) print ( 'Training data accuracy {:.2f}' . format (decision_tree.score(x_train_std, y_train) * 100 ))
print ( 'Testing data accuracy {:.2f}' . format (decision_tree.score(x_test_std, y_test) * 100 ))
|
このモデルでもテスト精度は80%程度であり、今のところSVMが最も良い結果を出しています。
5.4 Random Forest (ランダムフォレスト)
ランダムフォレストは、機械学習におけるより複雑で優れた決定木です。その実装を以下に示す。
1
2
3
4
5
|
from sklearn.ensemble import RandomForestClassifier
random_forest = RandomForestClassifier()
random_forest.fit(x_train_std, y_train) print ( 'Training data accuracy {:.2f}' . format (random_forest.score(x_train_std, y_train) * 100 ))
print ( 'Testing data accuracy {:.2f}' . format (random_forest.score(x_test_std, y_test) * 100 ))
|
学習データの精度は100%であり、素晴らしい!一方、テストデータの精度は90%であり、同様にまともです。
この記事もチェック:Pythonとsklearnを使って機械学習パイプラインを実装する方法
まとめ
この記事では、同じデータセットで多くの異なるアルゴリズムに触れ、それぞれのモデルで異なる結果を得ることができました。気に入っていただけたでしょうか?もっと学ぶために読み続けてください
お読みいただきありがとうございました。