今日のテーマは、「アヤメを分類する機械学習プログラム」です。(これも有名な題材ですね。)
題材
アヤメを分類するプログラムです。
アヤメの品種を分類するのに関係しているデータがGitHubに公開されているので、このデータ(csvファイル)をダウンロードして使いましょう。
アヤメデータのCSVデータ
↑をクリックし、ブラウザに表示されたCSVデータを「右クリック」して保存してください。
ファイル名は、「iris.csv」とし、C:\ml-introの直下に保存 してください。
データを見てみよう
<アヤメデータの内容>
カラム名 | 説明 |
---|---|
SepalLength | がく片の長さ |
SepalWidth | がく片の幅 |
PetalLength | 花びらの長さ |
PetalWidth | 花びらの幅 |
Name | アヤメの品種名 |
分類に関係する 特徴 は、「がく片の長さ」「がく片の幅」「花びらの長さ」「花びらの幅」の4つありますね。
「アヤメの品種名」は、正解ラベルです。
アヤメの品種としては、「Iris-Setosa」「Iris-Versicolor」「Iris-Virginica」の3つに分類されるそうです。
(画像は、https://www.datacamp.com/community/tutorials/machine-learning-in-r より引用)
では、未知のデータに対し、3つのうちのどれかに分類する機械学習プログラムを書いていきましょう。
ゴールまでのステップ
- 「iris.csv」を読み込む。
- 読み込んだアヤメのCSVデータには、正解ラベルが付いているので分離する。
- 全データのうち70%を訓練用データに、30%を判定用データに分ける。
- 訓練用データを使って学習させる。
- 判定用データ(未知のデータという想定)を与え、正しく分類できたか?を評価する。
学習に使うアルゴリズムは、サポートベクターマシンを使います。
アルゴリズムの選定については、↓の情報がわかりやすと思いました。
[参考情報]https://engineers.weddingpark.co.jp/?p=872
ここからが本題! 機械学習プログラムを書いてみよう
先に「Pandas」という Pythonでデータ分析を効率的に行うためのライブラリ をインストールしましょう。
(データの読み込みや統計量の表示、グラフ化などが楽にできる。)
$ pip install pandas
必要なライブラリをインポート
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
【Step1】アヤメデータの読み込み
# 【Step1】アヤメデータの読み込み
iris_data = pd.read_csv("iris.csv", encoding="utf-8")
【Step2】読み込んだアヤメデータには、正解ラベルが付いているので分離する
# 【Step2】読み込んだアヤメデータには、正解ラベルが付いているので分離する
y = iris_data.loc[:,"Name"]
x = iris_data.loc[:,["SepalLength","SepalWidth","PetalLength","PetalWidth"]]
【Step3】全データのうち70%を訓練用データに、30%を判定用データに分ける。
# 【Step3】全データのうち70%を訓練用データに、30%を判定用データに分ける。
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3, train_size = 0.7, shuffle = True)
【Step4】学習する(アルゴリズムは、サポートベクターマシン(クラス分類)の1つであるSVCを使う。)
# 【Step4】学習する(アルゴリズムは、サポートベクターマシン(クラス分類)の1つであるSVCを使う。)
clf = SVC()
clf.fit(x_train, y_train)
【Step5】評価する
# 【Step5】評価する
y_pred = clf.predict(x_test)
print("正解率 = " , accuracy_score(y_test, y_pred))
正解率=約96%! まあまあでしょうか、、、
まとめ
今回も、前回に引き続き、「機械学習の雰囲気」を感じてもらいました。
徐々に 機械学習プログラムの流れ がつかめてきたのではないでしょうか?
次回は、気象データをもとにした”予測”にチャレンジしてみたいと思います。