【Python】機械学習で花を分類する

 

こんにちは。のっくんです。

 

今日の記事では、花(アヤメ)を機械学習で学習し分類する方法をご紹介します。

 

Pythonのコード10行程度でできるので是非初心者の方もご覧ください。3分程度で読み終わります。

 

ネコ
機械学習?分類?なんだか難しそうだなー
のっくん
一見難しく聞こえるけど覚えてしまえば、実は簡単なんです。

 

機械学習?初めて!って方は以下のページをまず読んでみて下さい。

https://ymgsapo.com/simple-machine-learning/

 

 

花のデータを取得する

 

学習に使う花(アヤメ)のデータを取得します。Jupyter Notebookを起動して以下のコードを書いてみましょう。

 

 

requestを使って、githubからデータを取得して、iris.csvという名前で保存しています。

 

次にデータの中身を見てみましょう。ここで質問です。

 

のっくん
csvファイルを読み込むのに便利なライブラリは何だったかな?
ネコ
うーん、パンダ?パンダかな?

 

惜しい!pandasでした!

 

pandasについて、初めての方は以下の記事を参考にして下さい。

 

https://ymgsapo.com/csv-to-html/

 

pandasで読み取ったcsvの中身をみてみましょう。上のコードに続けて以下を追加します。

 

 

Jupyter Notebookだと変数名を打つだけでその中身を表示してくれるので便利です。実行してみましょう。

 

 

がく片の長さ、がく片の幅、花びらの長さ、花びらの幅、アヤメの品種の順で並んでいます。

 

一部しか表示していませんが、全部で150行ほどあります。アヤメの品種には3種類あり、4つのがく片や花びらの情報から機械学習を使ってアヤメの品種を当ててみます。

 

データセットの作成

 

ダウンロードしたアヤメのデータを学習用とテスト用に分ける必要があります。scikit-learnを使うと1行でこれを実行してくれる便利な機能があるんです。

 

新しいJupyter Botebookで新しいセルを追加して、以下のコードを書きます。

 

 

ラベルはアヤメの品種です。今回は教師有り学習ですので、予め正解を学習させます。

 

Nameにアヤメの品種が入っているのでそれをラベルyとしています。他の4つの花びらやガクの情報を入力データxとしています。

 

train_test_splitを使うと、学習用とテスト用のデータを自動的に作ってくれます。比率は

 

テスト:学習=2:8

 

にしています。また、データの偏りが無いように「shuffle=True」とし、元データをランダムに並び替えた後にデータを抽出するようにしています。(このパラメータはデフォルトでTrueなので、指定しなくても良いです。)

 

学習と評価

 

データセットができたところで、学習、評価をして見ます。先ほどのコードに以下を追加して下さい。

 

 

SVCというアルゴリズムを使って、学習と評価をしています。

 

実行すると、

 

 

高精度でアヤメの品種を当てることができました。

 

参考文献

 

PythonによるAI・機械学習アプリのつくり方、ソシム

 

 

まとめ

 

・pandasを使うとcsvのデータを読み込めます
・train_test_splitを使うと学習用とテスト用のデータを作成できます
・SVCを使用すると高精度でアヤメの品種を分類できます

 

ABOUTこの記事をかいた人

のっくん

理系院卒で大企業の研究所に就職。 趣味はプログラミング、レアジョブ英会話、筋トレ、旅行。 Twitter:@yamagablog