scikit.learn手法徹底比較! イントロダクション

MNIST手書き文字データセットを利用してscikit.learnのsupervisedな分類アルゴリズムを比較する. パラメーターチューニングや計算時間の感覚が掴みたくて, 1回やってみたかった.

MNIST手書き文字データセットとは, 機械学習初学者が何故か必ず与えられると言われている0から9の手書き文字が描かれた画像のデータセットである.

データ概要

次元: 28*28の784次元
値の範囲: 0-255の整数
クラス数: 0-9の10クラス

評価環境:

scikit.learn(sklearn): 0.10
CPU: Xeon E5-2667 (6コア 2.9 GHz)
メモリ: 8GB

この条件でscikit.learnが提供しているアルゴリズムを適用していく. 訓練データ数は, 1000から20000まで変化させ分類精度, 学習時間, 分類時間の推移を観察する. 最終的には全手法の結果をまとめるがしばらくは手法ごとに結果や考察を記事にしていく.

実験詳細

実験の詳しい手続きなど. 細かいことが気になる人以外は読まなくても大丈夫.

実験の主目的

scikit.learnの各分類手法について使い方をまとめる. 使い方というのはパラメーターとしてどのような選択肢があるか, そのパラメーターがどのように性能に影響を与えるかである.

性能への影響の与え方を見るためにMNISTデータセットの分類結果を用いる. しかし分類性能はあくまでこのデータセットに対するものであり, また上下関係はたまたま起こったものである可能性を考慮して欲しい.

実験手順

訓練集合のデータ数を[1000 3000 5000 10000 20000]と変化させて,
それぞれで以下の実験を行う.

1.訓練集合を用いて分類器のパラメーターを決定する
訓練集合を5つに分割し, そのうちの4つで学習, 1つでテストを行い, 分類精度を求める. これを5回繰り返し(5-fold cross validation), 特に注釈のない限り, 平均精度が最も高かった際のパラメーターを以後用いる.

2.テスト集合を用いて分類器の性能を計測する
テスト集合は訓練集合と異なる10000個のデータを使用する. 分類器は1で決定したパラメーターで訓練集合全体を用いて訓練を行う.

計測対象は
・分類精度(正答率)
・学習時間
・平均分類時間
の3つである.

実験手法に対する考察

なぜこのような実験手法を選んだかとバリエーションに関する考察.

有意差検定はしないの?

今回の企画の主旨は, 各分類器の使い方のチュートリアルであって最強の分類器を決めたいわけではない(手書きデータセットだけでやっても...). だから有意差検定はやらなくいいかなー. あと多群の有意差検定で, どれを使うべきかの調査がめんどくさい...

性能計測において正答率の分散を求めないのか

テスト集合のデータ数1万でテストすれば, そこまで大きな誤差は生まれ無いと判断した. 以下詳細.

k個目のデータが分類に成功した際に1, 失敗した際に0を取る確率変数をX_kとする.
今, 分類するデータ数をnとすると中心極限定理より
\frac{1}{n} \sum_{k=1}^n X_k \sim N(\mu, \frac{\sigma^2}{n})
となる. ただしμとσ^2はそれぞれX_kの平均と分散であり, Nは正規分布を表す. この式の左辺は分類精度に相当する.

σ^2は平均0.5のときに1/4となり最大となる. よってデータ数1万のとき最悪でも分類精度の標準偏差は1/200となる. これより分類精度は±1%の範囲に95.5%程度の確率で収まる.
この実験なら1%程度の誤差ならどうでもいいかなー, ということで分散は与えていない.

訓練集合の取り方は1種類でいいのか?

上の手順では, 訓練集合を全て用いて訓練した分類器によって性能を計測している. しかし訓練集合によって性能が変化することを考えると, 用いる訓練集合を変更して何度か性能を計測し平均などを求めるべきではないか?

うーん...確かにそうなんだけど, 手元にある手描き文字データセットのデータ数が4万ちょっとなので, 最初にテスト集合を定めて, 残りから訓練集合を決定する場合, 訓練データ数2万のとき, オーバーラップしない訓練集合は一つしか取れない. オーバーラップするように訓練集合を取れば, 何種類か訓練集合を取れるけど果たしてそれにどの程度意味があるのか... (クロスバリデーションではオーバーラップするように取ってるけど)

ある実験では訓練集合だったデータを, 次の実験ではテスト集合として用いる操作を許容するともう少し使えるデータは増えるが, その場合, 全実験でクロスバリデーションによるパラメーター決定をしないと「テスト集合を観測する前に全てのパラメーターを決定する」という原則に反してしまう. これはちょっとめんどくさい.

これらの理由から今回は上記のように訓練集合を取ることにした.