信頼はずっと、挑戦はもっと。

お問い合わせ
TEL:03-3496-3888

BLOG コアテックの社員ブログ (毎週月曜~金曜更新中)

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%の正解率になるはずなので、ちゃんと今回
教師データから傾向を見出して予測してくれたみたいです。

今後、もっと色々なパターンで機械学習をためしていきたいと思います。

この記事を書いた人

マスオさん

新納誠一

所 属:
役員
出身地:
新潟
仕事内容:
プログラミング