次元統合研究所ネフェテリシス

バーチャルブロガーによる日々の生活と研究録

エクセルでもできる一番簡単な人工知能の作り方

こんにちは。

リリア・セルケトールです。

今日は簡単な人工知能の作り方をご紹介します。

f:id:nefeterius:20181007162018p:plain

人工知能の中にもいくつか種類がありますが、その中の教師あり機械学習の一つ、最近傍法についてご紹介します。

教師あり機械学習についてですが、あらかじめ答えが分かっている問題をいくつか機械に学習させることによって、機械に問題を解く力を与えて、答えの分からない未知の問題を解かせる試みのことです。

ちょうど先生が生徒に対して授業をするようにして学習させることから、教師あり機械学習と呼ばれています。

具体例を挙げるとしたら、あらかじめ分かっているリンゴとミカンの特徴をひたすら学習させて、リンゴかミカンかよく分からない果物が来たときに、その果物の特徴からリンゴかミカンかを機械が識別するということです。

 

では、最近傍法についてご紹介しましょう。簡単にいうと、あらかじめ答えの分かっているあるものと、どれだけ特徴が近いかで識別する仕組みになっています。

実際に見た方が早いかもしれません。

せっかくやるならリンゴかミカンの識別問題は面白くないので、ある人の性癖識別問題にしましょう。

 

今回の目標はAさんが好きだと思うキャラか、普通だと思うキャラか予測するモデルを作りたいと思います。

好きか嫌いかを決める特徴量としてスリーサイズを使っていきたいと思います。

あらかじめAさんにアンケートをとり、好きか普通か分けてもらいました。

それが以下の表になります。

f:id:nefeterius:20181007164122p:plain

エストを縦軸、バストを横軸にとりグラフにするとこうなります。

赤丸が好きなキャラ、青丸が好きなキャラを表します。

f:id:nefeterius:20181007164506j:plain

最近傍法は、ある未知の点があった時に好き(赤)か普通(青)か、どっちにより近いかで識別を行います。

f:id:nefeterius:20181007165019p:plain

 

実際にやってみましょう。

f:id:nefeterius:20180914054323j:plain

予測対象としてキズナアイさんです。Aさんは好きなのでしょうか。普通なのでしょうか。

公式データだとスリーサイズが85、59、83です。

f:id:nefeterius:20181007165901j:plain

キズナアイさんのデータと、それぞれの既知のデータから距離を測ります。使用する距離はいろんなものがありますが、今回はみなさんお馴染みのユークリッド距離を使います。高校で出てくる三平方の定理を使うアレです。

エクセルで行う場合は=SQRT((B2-$G$3)^2+(C2-$H$3)^2+(D2-$I$3)^2)で入力して、下に引っ張るとそれぞれの既知のデータとの距離が算出されます。

距離が算出されたら、好きで一番近い距離のものと普通で一番距離が近いものをピッグアップします。

f:id:nefeterius:20181007170748j:plain

関数はMINを使えば最小値を取ってくることができます。

そして、好きの距離の最小値と普通の距離の最小値を比べたときに、どちらがより近いかで判断をします。

今回の場合は普通の方が距離が近いので、Aさんはキズナアイのことを普通に思っていると予測されます。

これが最近傍法になります。

 

簡単で割と強力な予測モデルになりますが、飛び値に弱いという欠点があります。

この最近傍法を改良したものがK近傍法になります。

原理はほぼ同じなのですが距離が近いものをK個選んできて、それを投票して識別するという点が異なります。Kは任意の値ですが、票が割れることを防ぐため奇数を使います。

 

実際にやってみましょう。K=3です。

f:id:nefeterius:20181007175946j:plain

まずはSMALLを使って好きと普通の距離が近いものを三つとってきましょう。=SMALL(配列、順位)で小さな順にとってこれます。

それぞれとってこれたら、とってきたものの中で距離が近い順に三つ取り出します。

f:id:nefeterius:20181007180253p:plain

三つ取り出したら、MATCH関数とIF関数を使ってそれぞれの数値の由来を調べます。

MATCH関数を使えば、検索対象の数値が検索範囲の何行目にあるか分かります。今回3行目以下が好きで、4行目以上が好きなので、何行目か分かれば数値がどこ由来かが分かります。今回は=IF(MATCH(H12,$I$5:$I$10,0)>3,"普通","好き")でどこ由来か、算出しました。

投票結果はCOUNTIFで集計します。

コマンドは=IF(COUNTIF(H13:J13,"普通")>COUNTIF(H13:J13,"好き"),"普通","好き")。

結果として普通が三票でキズナアイさんはAさんにとって普通という結果となりました。

 

このモデルで他の人の予測もやってみましょう。

f:id:nefeterius:20181007181920j:plain

ルイズ(76,53,75)

f:id:nefeterius:20181007182104j:plain

好きみたいです。

 

f:id:nefeterius:20181007182409j:plain

阿部奈々(84,57,84)

f:id:nefeterius:20181007182508j:plain

普通みたいです。

 

どうでしたでしょうか。

意外と人工知能でも簡単だったでしょう。

今回は分かりやすくするためにスリーサイズを基にしたモデルを構築しました。

実際は見た目や性格などの様々な要因によって好きかどうかが決まると思います。

今回は二種の分類問題でしたが、三種類以上の分類問題にも応用が利きますし、特徴量ももっと増やすこともできます。

みなさんもこれを参考にオリジナルモデルを作られてみてはいかがでしょうか。