2017
21
9月
機械学習やっちゃうよ!
テクログ
こんにちは、ni-yoです。
世はAIというワードを日常的に目にするようになってきておりますが、
今回は超簡単なサンプルからAIプログラムの世界に少し触れてみたいと思います。
今回は機械学習では非常にメジャーなライブラリであるscikit-learnに触れてみます。
※本内容はni-yoが勝手に考えたケースなので、機械学習として適切な内容とは限りません。
pyhton3が入っていて、pip3が使える前提で話をしていきます
ターミナルコマンドで以下を入力
pip3 install -U scikit-learn scipy matplotlib
データ整理に使うモジュールも入れましょう
pip install pandas
ここまで入れればひとまず準備は完了です。
Let’s 機械学習!
今回は、2つの値を与えて左の数値が大きければ0を返し、
右の数値が大きければ1を返すという処理を想定します。
最初にサンプルとしてデータと正解を与えて学習させるやり方を
『教師あり学習』と言います。
また、最期に機械学習の予測結果が合っていたかを検証する処理を
作っています。
教師データとするのは、以下のようなデータです。
[1,4,1], #右が大きいので1 [2,1,0], #左が大きいので0 [3,2,0], #左が大きいので0 [2,3,1], [3,7,1], [6,4,0]
の1、2番目の数値が与えるデータ。
3番目が正解データです。
下記処理にて値を取り出しています
data = df.ix[:,0:1] #与えるデータ label = df.ix[:,2] #データに対しての正解
ここで機械学習の基本、サポートベクターマシンを使うための
おまじないを唱えます
clf = svm.SVC()
サポートベクターマシンに、先程切り出したデータと
答えを与えます。
これがいわゆる教師データになります。
clf.fit(data,label) #学習させる
clf.fitをして学習が終わったら、与えるデータと
予測処理を呼びます
与えるデータは、今回は少し多めに
10コ与えて正解率をみていきます。
yosokudata = [
[5,4], [0,1], [1,2], [6,3], [3,4], [2,0], [1,4], [0,2], [3,1], [7,1],
]
予測してくれるのは、predictという関数です
clf.predict(yosokudata)
簡単ですが、上記を踏まえて完成した処理が以下です。
最期に、予測結果があっているかどうかを検証する処理を
付け加えます。
sample1.py
-------------------------------------
import pandas as pd from sklearn import svm,metrics input = [ [1,4,1], [2,1,0], [3,2,0], [2,3,1], [3,7,1], [6,4,0] ] df = pd.DataFrame(input) data = df.ix[:,0:1] #DATA index label = df.ix[:,2] #DATA label clf = svm.SVC() clf.fit(data,label) #学習させる #予測する yosokudata = [ [5,4], [0,1], [1,2], [6,3], [3,4], [2,0], [1,4], [0,2], [3,1], [7,1], ] yosoku = clf.predict(yosokudata) #予測実行 print("予測結果",yosoku) #検証します for index,kotae in enumerate(yosoku): print(yosokudata[index][0],yosokudata[index][1],kotae) if yosokudata[index][0] < yosokudata[index][1]: seikai = 1 else: seikai = 0 if seikai == kotae: print("正解") else: print("不正解")
—————————————
さて…上記の結果はどうだったんでしょうか?
スクリプトを叩いて結果を見てみます。
python sample1.py
予測結果 [0 0 1 0 1 0 1 1 0 0]
5 4 0
正解
0 1 0
不正解
1 2 1
正解
6 3 0
正解
3 4 1
正解
2 0 0
正解
1 4 1
正解
0 2 1
正解
3 1 0
正解
7 1 0
正解
なんと…10問中9問の正解を叩き出しました。
普通に0か1だったら50%の正解率になるはずなので、ちゃんと今回
教師データから傾向を見出して予測してくれたみたいです。
今後、もっと色々なパターンで機械学習をためしていきたいと思います。