search
LoginSignup
0

More than 3 years have passed since last update.

posted at

updated at

[Python]SVMでアヤメの種類を判別する

初心者向けのレクチャーによく使われるirisデータを使って、機械学習の分類問題にトライしてみます。

使用するデータ

ireiデータ。(irisは「アヤメ」の花を意味。)
アヤメの品種のSetosa Versicolor Virginicaの3品種に関するデータ。
全部で150件のデータセット。

データセットの内容

Sepal Length:がく片の長さ
Sepal Width:がく片の幅
Petal Length:花びらの長さ
Petal Width:花びらの幅
Name:アヤメの品種データ(Iris-Setosa、Iris-Vesicolor、Iris-Virginicaの3種類)
image.png

採用するモデル

SVM(サポートベクターマシン)。
SVMは教師あり学習の分類問題に適している。
スパム判別器なども作ることが可能なモデル。
教師あり学習なので、特徴量データと目的変数が必要。

全体の流れ

1)データの下準備
2)データを可視化
3)モデルを学習・評価

実践

1)データの下準備

まずは、必要なライブラリをインポートした後、データを取り込み確認。

import numpy  as np
import pandas as pd
import seaborn as sns
sns.set_style("whitegrid")
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.model_selection import train_test_split, cross_validate

df = pd.read_csv("iris.csv")
df.head()

    SepalLength SepalWidth  PetalLength PetalWidth  Name
0   5.1 3.5 1.4 0.2 Iris-setosa
1   4.9 3.0 1.4 0.2 Iris-setosa
2   4.7 3.2 1.3 0.2 Iris-setosa
3   4.6 3.1 1.5 0.2 Iris-setosa
4   5.0 3.6 1.4 0.2 Iris-setosa

訓練データとテストデータに分割する。

X = df[["SepalLength","SepalWidth","PetalLength","PetalWidth"]]
y = df["Name"]

X_train, X_test, y_train, y_test = train_test_split(X, y)
X_train.shape, X_test.shape

((112, 4), (38, 4)) #分割後の行列数確認

訓練データとテストデータそれぞれでDataframeを作成。

data_train = pd.DataFrame(X_train)
data_train["Name"] = y_train

2)データを可視化

検証データでは、実際にアヤメの種類と獲得超量にどんな関係があるのか?
プロットして、種類ごとに特徴量に違いがあるのか確認してみる。

sns.pairplot(data_train, hue='Name', palette="husl")

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269450/43205a3a-1981-ad86-f9a3-d14a656ec628.png)


たしかにアヤメの種類によって、各特徴量に明確に差があるように見える。

3)モデルを学習・評価

実際にSVMに検証データを入れて、モデルをつくってみる。

X_train = data_train[["SepalLength", "SepalWidth","PetalLength"]].values
y_train = data_train["Name"].values

from sklearn import svm,metrics

clf = svm.SVC()
clf.fit(X_train,y_train)

作成したモデルにテストデータを入力。

pre = clf.predict(X_test)

モデルを評価する。

ac_score = metrics.accuracy_score(y_test,pre)
print("正解率=", ac_score)

正解率= 0.9736842105263158

テストデータとモデルによって得られた結果が97%一致していることが確認できた。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0