Help us understand the problem. What is going on with this article?

社内勉強会 機械学習入門(7.アヤメを分類してみよう)

今日のテーマは、「アヤメを分類する機械学習プログラム」です。(これも有名な題材ですね。)

題材

アヤメを分類するプログラムです。
アヤメの品種を分類するのに関係しているデータがGitHubに公開されているので、このデータ(csvファイル)をダウンロードして使いましょう。

アヤメデータのCSVデータ
↑をクリックし、ブラウザに表示されたCSVデータを「右クリック」して保存してください。
ファイル名は、「iris.csv」とし、C:\ml-introの直下に保存 してください。

データを見てみよう

ヤマメの分類に関係する特徴が数値化されていますね。
2019-09-03_13h02_06.png

<アヤメデータの内容>

カラム名 説明
SepalLength がく片の長さ
SepalWidth がく片の幅
PetalLength 花びらの長さ
PetalWidth 花びらの幅
Name アヤメの品種名

分類に関係する 特徴 は、「がく片の長さ」「がく片の幅」「花びらの長さ」「花びらの幅」の4つありますね。
「アヤメの品種名」は、正解ラベルです。

アヤメの品種としては、「Iris-Setosa」「Iris-Versicolor」「Iris-Virginica」の3つに分類されるそうです。
2019-09-03_13h17_41.png
(画像は、https://www.datacamp.com/community/tutorials/machine-learning-in-r より引用)

では、未知のデータに対し、3つのうちのどれかに分類する機械学習プログラムを書いていきましょう。

ゴールまでのステップ

  1. 「iris.csv」を読み込む。
  2. 読み込んだアヤメのCSVデータには、正解ラベルが付いているので分離する。
  3. 全データのうち70%を訓練用データに、30%を判定用データに分ける。
  4. 訓練用データを使って学習させる。
  5. 判定用データ(未知のデータという想定)を与え、正しく分類できたか?を評価する。

学習に使うアルゴリズムは、サポートベクターマシンを使います。
アルゴリズムの選定については、↓の情報がわかりやすと思いました。
[参考情報]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))

2019-09-03_14h06_44.png

正解率=約96%! まあまあでしょうか、、、

まとめ

今回も、前回に引き続き、「機械学習の雰囲気」を感じてもらいました。
徐々に 機械学習プログラムの流れ がつかめてきたのではないでしょうか?
次回は、気象データをもとにした”予測”にチャレンジしてみたいと思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away