「Python」scikit-learnによる機械学習の準備

 こんにちは、今回cistLTで書いて回してるアドベントカレンダーの17日を書いてるフクダです。当日の昼から急ピッチでこれを書いています。昔から期限があるものはギリギリまで残しちゃうのでこれ早めに直したいです。

 

 さて、今回は最近使ってるpythonで使う予定のscikit-learnについて書いていこうと思います。

 

まず紹介から、scikit-learn(サイキットラーン)とはpythonオープンソース機械学習ライブラリのことで様々な分類回帰クラスタリングアルゴリズムを備えており、様々な数値計算ライブラリとやり取りができるものになっています。以下からpythonのインストール等に移っていきます。(開発環境はPyCharmを使用)

1.python(3.6.8)のインストール

 現在pythonの最新版はバージョン3.9.0ですが、パッケージであるscikit-learnがまだ対応していないためインストールすることが出来ません。なので

pythonlinks.python.jp

こちらから3.6.8をインストールしました。(3.9.0ずっと使ってた) 

2. scikit-learnのダウンロード

 PyCharmの設定からPythonInterpretorを開き、+ボタンを押してscikit-learnを検索、左下からインストールします。

f:id:hayato_fukuda:20201217134525j:plain

  f:id:hayato_fukuda:20201217134838p:plain

 3. 実際に触ってみる

ai-kenkyujo.com

 今回は上記の記事を参考にさせていただき学習しました。以降書くことは記事を簡単に解釈した文章を綴っています。

f:id:hayato_fukuda:20201217165704p:plain

コードの全体図

➀インポート

from sklearn import svm
from sklearn.metrics import accuracy_score

 ここではSVM(サポートベクターマシン)という、データを直線で分割することによって学習できる手法(予測したいものがあるときに多く使われるらしい)と学習結果を表示するmetrics、accuracy_scoreをインポートしています。

②見本と練習問題とモデル

#教師データ
train_data = [[0, 0], [1, 0], [0, 1], [1, 1]]
train_label = [0, 1, 1, 0]

#テストデータを準備
test_data = [[0, 0], [1, 0], [0, 1], [1, 1]]

 今回は教師あり学習を使っていてtrain_dataが教師の指示、train_labelがこのデータに対する答えになっています。つまりお手本、見本ということですね。モデルはこれを使って学習していきます。また、test_dataはモデルが与えられる問題でその出力結果がモデルが出す回答になります。

③用意されているアルゴリズムの指定と学習の実行

#アルゴリズムを指定

clf = svm.SVC(C=10, gamma=0.1)

#学習

clf.fit(train_data,train_label)

 ①でインポートしたSVMの中からクラスを分類するためのSVC(CはClassification)を使用しており、モデルがclf.fit(train_data,train_label)で学習しています。(cif.fit()で学習実行)

④テストデータを使ってテスト

#テスト
test_label = clf.predict(test_data)

  学習が③で終わったのでテストをしていきます。

⑤ターミナルでモデルが出した回答を表示

#テスト結果の表示
print("テストデータ:{0},予測ラベル:{1}".format(test_data,test_label))
print("正解率= {}".format(accuracy_score([0, 1, 1, 0], test_label)))

 print文を使って回答を表示しています。

⑥結果

テストデータ:[[0, 0], [1, 0], [0, 1], [1, 1]],予測ラベル:[0 1 1 0]
正解率= 1.0

 結果は上記のようになりました、正答率100%です(当たり前)。ちなみにテストデータを以下のようにすると正答率はこうなりました。

テストデータ:[[1, 0], [1, 1], [0, 0], [0, 1]],予測ラベル:[1 0 0 1]
正解率= 0.0

テストデータ:[[0, 1], [1, 0], [0, 1], [1, 1]],予測ラベル:[1 1 1 0]
正解率= 0.75

簡単に正答率下がっちゃいますね。for文や新しいデータを取り入れることで、見本にないようなデータの場合にも対応してくれると思うので、時間あるときやってみたいです(`・ω・´)b

⑦振り返り

 今回は初のブログと一歩踏み込んだ機械学習の準備をしました。ブログを一から作るとなるとサーバー問題とかもあって色々難しいのかな、と避けていましたがHatena Blogさんの方でHTML編集もしてくれるのやばいですね。これからもバリバリ発信していける気がします(^▽^)/

 このようなブログを書く動機となった先輩方や、すべてに感謝して今回は終わろうと思います、ありがとうございました!!