Pythonでアイリスデータの機械学習|SVMやKNN,決定木、ランダムフォレストでの実装方法を解説

スポンサーリンク

今日は新しいデータセット、アイリス・データセットについて学びましょう。このデータセットは、花の様々な性質を扱い、その性質によって花を分類するという、とても興味深く楽しいデータセットです。

スポンサーリンク

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%であり、非常に良い結果でした。

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%であり、同様にまともです。

まとめ

この記事では、同じデータセットで多くの異なるアルゴリズムに触れ、それぞれのモデルで異なる結果を得ることができました。気に入っていただけたでしょうか?もっと学ぶために読み続けてください

お読みいただきありがとうございました。

タイトルとURLをコピーしました