【人工知能】AIを使ってアヤメの品種を言い当てる!

f:id:eiaia:20200728214747p:plain



どうもー、人工知能絶賛勉強中のヤマさんです!
今回は、人工知能のちからでアヤメ(花)の品種を言い当てたいと思います。

1.【やりたいこと】花びらの情報からアヤメの品種を言い当る

まず、アヤメってどんな花でしょうか?

イメージできない。。。

ヤマさんはイメージできませんでしたが、アヤメはこんな花です。

Iris setosa

上は今回分類したい品種の1つ目、ヒオウギアヤメ(Iris-Setosa)。
※画像をクリック・タップすると引用元にジャンプします。

Schwertlilie (Iris versicolor)

そして、こちらが2つ目のブルーフラッグ(Iris-Versicolor)。

Iris virginica shrevei BLUE FLAG

最後がバージニカ(Iris-Virginica)。ちなみに、ブルーフラッグとバージニカは正式な和名はない模様。

日本にはあまり咲いていないのかな?

これら3つの品種を、”花びらの長さ””花びらの幅”の情報をもとに品種を予測したいと思います。

なんでアヤメ??

アヤメのデータは人工知能に使うデータとしてとても有名なものの1つです。
いろんなところでアップされてます。今回はこちらからダウンロード
kaggle.com:https://www.kaggle.com/uciml/iris

2.【やってみた】 アヤメの品種を言い当てる!

1.まずはデータを見てみよう

さて、いよいよ人口知能の登場ですと言う前に、まずはデータの中身を見てみましょう。

f:id:eiaia:20200726153609j:plain

元々のデータは”がく片の長さ”、”がく片の幅”、”花びらの長さ”、”花びらの幅”、”花びらの長さ”、”品種”が1つのまとまりとなったデータです。

上の画像ではヒオウギアヤメのデータしか映っていませんが、ブルーフラッグとバージニカのデータももちろんあります。

今回は”花びらの長さ”と”花びらの幅”の特徴量(予測したいものの特徴を表した数値)に着目して予測します。

3品種×50個=150個のデータを可視化してみるとこのようになります。

f:id:eiaia:20200726192141j:plain

なんか、分けられそう(笑)。

パット見ただけでもヒオウギアヤメは花びらの幅も長さも小さいことが分かりますね。
ブルーフラッグとバージニカはだいたいは分けられそうに見えますが、似たような特徴のデータもいくつかあります。

2.人工知能で予測する

それでは、人工知能のちからで品種を言い当ててみましょう。

今回使用するのは線形サポートベクターマシンです。ざっくり言うと、品種を分ける直線の境界線をつくる人工知能です。
線形サポートベクターマシンのもう少し詳しい話は後ほど。

今回は150個のデータのうち、80%を学習用データ人工知能が学習するためのデータ)、20%をテスト用データ(学習の結果どれぐらい正解できるかを試すためのデータ)として使います。

f:id:eiaia:20200726200110j:plain

 ここで、テスト用データは人工知能からすると見たことのない問題ですが、学習して育てたモデル(ここでは品種を分ける境界線)に当てはめて予測を行います。

学習の結果は、、、

f:id:eiaia:20200726224217p:plain

3本の直線は線形サポートベクターマシンが学習の結果つくった境界線です。
また、図上にある丸・三角・四角はテスト用データの品種、つまり答えです。図を見るとほとんど正解していることがわかります。
今回のテストでは正答率は96%でした。図を見ても間違えた場所がわかると思います。

1問間違いだ!

3.結果について

結果はすごい?

この結果をみなさんはどう考えますか?

  • 9割以上正解はすごい?
  • 人工知能のくせに100%正解できないなんてダメダメではないか?

ダメダメとは言わないまでも、すごいと感じた方は少ないのではないでしょうか。
そもそも最初に全データを見たときに自分でも境界線引けるよ(笑)と感じた方もいると思います。

実は線形サポートベクターマシンの原型は1963年に発表された技術だそうです。
80年近く前からの技術ですが、これも人工知能の1つです。

人工知能って昔からあるんだ!

人工知能と一括りにするのではなく、それぞれの技術を正しく認識することが大切だとヤマさんは思っています。

じゃぁだめなのか

では、線形サポートベクターマシンは昔の技術で使えないのかというとそういうわけではないと思います。

今回は、そもそも150個のデータを見ると直線できれいに分類しきることができない問題だということがわかると思います。

線形サポートベクターマシンで100%の正解率を目指したヤマさんが悪かった(笑)

また、今回は図にしやすいこともあり、特徴量(予測したいものの特徴を表した数値)を”花びらの長さ”と”花びらの幅”の2つにしましたが、”がく片の長さ”と”がく片の幅”も加えて学習することができます。
2つの特徴量つまり平面中で境界線を引いてくださいと言われれば誰でも引けそうですが、3つの特徴量つまり空間中に境界面を引いてくさいと言われると難しそうですよね。
さらに4つの特徴量では、、、

ヤマさんには境界が引けないよ、、、 

3.【少し解説】境界線の決め方

ここからは少しだけ詳しい話になります。
難しいと思ったら読み飛ばしてもらってOKです。 

線形サポートベクターマシンでは境界線を引くわけですが、どのようなルールで境界線を決めているのでしょうか。
答えはマージン最大化です。

マージン??最大化??

となると思うので解説していきます。
まずは、この図を見てください。

f:id:eiaia:20200727210530j:plain

青い四角と赤い丸のデータに対して境界線を引くことを考えます。

黒い点線のように境界線が引けそうですね。

f:id:eiaia:20200727213252j:plain

青い四角と赤い丸のデータの中でも境界線に最も近いデータをサポートベクトルと呼びます。

サポートベクトターマシンの名前の由来!やっと出てきた!

そして、このサポートベクトルと境界線との距離をマージンと呼びます。

このマージンを最も大きくすることがマージン最大化ということなのです。

サポートベクターマシンではマージン最大化となる境界線をつくります!

4.【まとめ】

今回は人工知能を使ってアヤメの分類をやってみました!

 サポートベクターマシンは”線形=直線”だけではありません。
次は他のサポートベクターマシンにも挑戦したいと思います!