前回は、lfwデータをLinearSVCを使って分類してみました。学習用データは855個だったのですが、学習にかなり時間がかかりました。実際、どのくらいの時間がかかるのか計測して、改善してみたいと思います。
前回は画像データそのままの状態で学習させましたが、分類に必要な情報に情報を削減して、学習させてみたいと思います。
PCAによる次元削減
情報削減するために、PCA(Principal Component Analysis)による次元削減を試してみたいと思います。
今回、元データを95%表現可能な範囲での主成分分析を行ったところ、145個の主成分で表現できるという結果が出ました。主成分145個の上位30個を表示してみましょう。これらのデータの組み合わせで全てのデータが表現されるということでしょうか。
ちなみに、主成分分析の結果、Bushさんはこんな感じになったということなのかな?
このように、855(データ数)×62(垂直)×47(水平)だったデータ量が855×145(主成分の数)に次元削減れたことで学習の演算量が削減されるはずです。
ライブラリや、GPU環境だとまた違った結果になるのでしょうが、貧弱なローカルマシンのCPUでの実行結果の比較です。
学習用データ数:855個 検証用データ数:285個 | 入力 62×47の画像 | 入力 PCA(主成分145個) |
---|---|---|
PCA分析時間 | – | 0.530s |
PCA変換時間 | – | 0.044s |
LinearSVC学習時間 | 13.549s | 1.24s |
LinearSVC予測時間 | 0.019s | 0.001s |
合計時間 | 13.568s | 1.815s |
かなり高速になりました。
ただ、正解率がかなり下がってしまいました・・・
実行結果はこちら・・・
次回は精度向上できないか?試してみたいと思います。
「Pythonと機械学習であそぼう(LinearSVCによる分類をPCAで高速化してみよう)」への1件のフィードバック
ピンバック: Pythonと機械学習であそぼう(データ標準化で分類学習の精度を向上してみよう) | ぼちぼちいこらい