こんにちは、エンジニアのオオバです。

前回記事からの続きです。
最低限の機械学習の知識を手に入れるため勉強中。

本書の4章に突入し、やっとタイトル通りの機械学習内容に入ってまいりました。

機械学習の第一弾として、等値演算を学習させてみます。
※本書ではXOR演算学習が紹介されています

等値演算とは、AとBの2つの値が同じであれば真、異なれば偽であるという、プログラム的には日常的によく使う演算です。

今回やること

  1. 学習用データを用意する
  2. 学習用データで学習させる
  3. テストデータで学習の度合いを確認する

→11万文字で徹底解説した「DOTweenの教科書」Unityアニメーションの超効率化ツールはこちら

事前準備

Python向け機械学習の定番フレームワークscikit-learn(サイキットラーン)を使うため、以下のコマンドでインストールします。

pip install -U scikit-learn scipy matplotlib scikit-image  

SVMというアルゴリズムを利用して機械学習をさせます。

先にサンプルコードを御覧ください。

equal-train.py · GitHub

ポイントをかいつまんで見ていきます。

1.学習用データを用意する、2.学習用データで学習させる

学習用データを用意して、データとラベルで分けます(23行目辺り)。

<GoogleAdsense type='1' />

## 学習させるためにデータとラベルに分ける
data = []  
label = []  
for row in equal_data:  
    a = row[0]  
    b = row[1]  
    labelstr = row[2]  
    data.append([a, b])  
    label.append(labelstr)  

34行目のSVMオブジェクトのfit関数で学習させるわけですが、その関数仕様 (第1引数 : データ, 第2引数 : ラベル)に合わせます。

## データの学習
clf = svm.SVC()  
clf.fit(data, label)  

3.テストデータで学習の度合いを確認する

<GoogleAdsense type='1' />

## テストデータ用意
## 0番目と1番目が比較数値
## 2番目が結果0は偽、1だと真(ラベル)
test_data =[  
    [40, 41, 0],  
    [1, 1, 1],  
    [90, 99, 0],  
    [3, 10, 0],  
    [20, 20, 1],  
    [53, 53, 1],  
    [2, 2, 1]  
]  

<GoogleAdsense type='1' />

## データとラベルを分ける
data = []  
label = []  
for row in test_data:  
    a = row[0]  
    b = row[1]  
    labelstr = row[2]  
    data.append([a, b])  
    label.append(labelstr)  

37行目でテストデータ(test_data)を定義し、先と同様にデータとラベルに分けます。

## データを予測
pre = clf.predict(data)  

60行目のpredict関数で予測されたデータを受取り、学習度合いを確認します。

ちなみに今回の正解率は、正解率: 6 / 7 = 0.8571428571428571でした。

学習データがまだまだ足りないようです。

最後に

本書でやっと本題の機械学習の内容になりました。面白いです。

参考

オススメ記事
検証環境