前回記事からの続きです。
最低限の機械学習の知識を手に入れるため勉強中。
本書の4章に突入し、やっとタイトル通りの機械学習内容に入ってまいりました。
機械学習の第一弾として、等値演算を学習させてみます。
※本書ではXOR演算学習が紹介されています
等値演算とは、AとBの2つの値が同じであれば真、異なれば偽であるという、プログラム的には日常的によく使う演算です。
今回やること
- 学習用データを用意する
- 学習用データで学習させる
- テストデータで学習の度合いを確認する
事前準備
Python向け機械学習の定番フレームワークscikit-learn
(サイキットラーン)を使うため、以下のコマンドでインストールします。
pip install -U scikit-learn scipy matplotlib scikit-image
SVMというアルゴリズムを利用して機械学習をさせます。
先にサンプルコードを御覧ください。
ポイントをかいつまんで見ていきます。
1.学習用データを用意する、2.学習用データで学習させる
学習用データを用意して、データとラベルで分けます(23行目辺り)。
# 学習させるためにデータとラベルに分ける 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.テストデータで学習の度合いを確認する
# テストデータ用意 # 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] ] # データとラベルを分ける 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
でした。
学習データがまだまだ足りないようです。
最後に
本書でやっと本題の機械学習の内容になりました。面白いです。