#学習記録(10日目)
勉強開始:12/7(土)〜
使用書籍:大重美幸『詳細! Python3 入門ノート』(ソーテック社、2017年)
【Numpyの配列(Ch.15 / p.380)】 から再開(9日目)、
【手書き文字の分類(Ch.16 / p.396)】 まで終了(10日目)
本日から機械学習に入ります。
##機械学習(手書き文字の分類)
(1)学習データを訓練データとテストデータに分ける。
(2)訓練データと教師データを学習器に入れる。→ 学習済みモデル(分類器)
(3)テストデータと教師データを分類器に入れ、性能を評価する。
・scikit-learn(サイキットラーン)という学習器を使用
・手書き文字の分類(sklearnパッケージのdatasetsモジュール使用)
パッケージは複数のモジュールをまとめたもの。
・scikit-learnの数字画像データを使用して練習
今回は画像データ(digits.data)と教師データ(digits.target)を分割して使用する。
画像データの2/3が訓練データ、1/3がテストデータ
教師データについても上に対応するよう分割する。
アルゴリズムはSVM(サポートベクターマシーン)のSVCを使用
・テストデータを分類器に入れたところ、以下のエラーが発生
Classification metrics can't handle a mix of multiclass-multioutput and multiclass targets
→ 全て打ち直したら解決した。原因不明・・・。再現中に、全角スペースが原因で何回かエラーが出たから、その可能性もあるかも。
###サポートベクターマシーンのSVCにおけるgamma
・gammaに限らず、svm.svc()の引数で学習器のパラメータを調整できる。
書籍上はgamma=0.001で精度96.3%だったが、gamma=1としたところ、9.8%まで精度は落ち込んだ。
逆にgamma=0.001としたところ、精度93.2%に。低ければよいというものでもないらしい。
このあたりの調整がよく聞くチューニングというものに該当するのかな?