python機械学習のコード解析

>目的

AIを作るということに興味があります。Pythonという言語を使って記述するらしいということがわかっていますので、Python機械学習の理解のためにコードの解析をします。

 

 

>>出典

[Python]10数行のコードで機械学習を実装(手書き文字の認識) - Qiita

 

>>コード

 

f:id:zizamo2193:20200105153605p:plain

>>①from sktlearn import datasets,svm

Pythonではimport文を使って標準ライブラリやpipでインストールしたパッケージ、自作のパッケージなどをインポートできる。

Pythonでは関数やクラスなどをまとめて書いたファイルをモジュールという。

モジュールとかライブラリとかパッケージとかは全部同じ意味です。要するに他ファイルに書かれた関数をこのファイルのこのコードで呼び出せるようにする記述です。

 

>>②digits = datasets.load_digits()

機械学習といえばscikit-learn(サイキットラーン)ですが、scikit-learnの中にはすぐに機械学習やデータ分析を試せるように、ロードして使えるデータセットがいくつかあります。

とのことで、またサーキットラーン公式に、

Load and return the digits dataset (classification).

とあって、クラシフィケーションの意味が分かりませんが、まあload_xxxは実験用データセットxxxを読み込む関数で、戻り値のデータセットを変数digitsに格納しているんだ、と推測できます。変数の型は定義しなくてもいいみたいです。

 

>>③digits['data'][0].reshape(8,8)

これはコメントの記載から、リスト型のdigitから、行[data]、列[0]のところにあるデータをreshape()で行列に整形していると推測できます。図にするとこうです。

f:id:zizamo2193:20200105153600p:plain

データを行列に整形する、というのがイメージできませんが、次に進みましょう。

 

>>④digits.target[0]

targetには正解ラベルがはいっているらしいです。

datasetsの中身を詳細に見ようとして手間取ったので、サイトにあった下記の説明で納得することにします。構造はわかりませんがそういう事らしいです。

データセットは8x8の画像が1797枚。それぞれに0〜9のラベルがついている。

 

>>⑤svm.SVC()、clf.fit(digits.data,digits.target)

コメントにはサポートベクターマシンとあります。これは例えば、xy平面上に各データA群、B群をプロットしていき、ABを切り分ける線を引く方法論のようです。このコードの場合はそれがxy平面の二次元ではなく、64次元になったということだと思います(意味不明)。Fitは学習だそうで、fitにデータと正解ラベルを引数として渡すと、このclfはそのデータの内容を学習した状態になるということだと思います。1800枚の画像なので、0~9までの数字の手書きの文字をそれぞれ180回ずつ見て、特徴を覚えた感じだと思います。dataと正解ラベルの対応とかはどうなっているんでしょうか。勝手にやってくれているんでしょうか。

>>⑥test_data = ...、clf.predict(test_data)

この[[]]というのは、行列のデータを作るときの記号で、2x2の行列なら[[0,0],[0,0]]のようになります。このコードの書き方だと1x64の行列になると思いますが、ちゃんと8*8に内部的に再解釈している?predictは予測で、先ほど学習したclfにテストデータを渡して、predictすると、どの正解ラベルに入るかを教えてくれています。

>>参考文献

https://note.nkmk.me/python-import-usage/

 

https://yolo.love/scikit-learn/datasets/

 

https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_digits.html

 

https://dev.classmethod.jp/machine-learning/introduction-scikit-learn/

 

http://akiniwa.hatenablog.jp/entry/2013/12/20/120734

 

http://www.sist.ac.jp/~kanakubo/research/neuro/supportvectormachine.html