pca+kmeansについての雑実験
はじめに
列数が多いデータセットに対してクラスタリングを行う場合にPCAで列数を次元削減してからクラスタリングをするという手法があるらしいです。 確かにPCA等で列の次元削減を行うことでノイズ成分を落とせるので、うまくいけば重要となる特徴だけを用いたクラスタリングができそうです。 近い考え方で言語処理系のデータを扱うときにBag of Words+TFIDFで作った特徴量をSVDで次元削減したデータを学習器への入力とするという手法はありますね。
下記文献の実験では上記の手法は有効となっていますが、ちょっと中身理解しきれていない部分もあるので実験ベースで確認をしていきたいと思います。 http://ranger.uta.edu/~chqding/papers/KmeansPCA1.pdf
実験
MovieLens 1M Datasetを用いて実験を行いました。 このデータセットは約6000のユーザが約4000の映画に対して5段階評価をつけたデータセットになります。
6000のユーザを映画の嗜好性が近いグループでまとめるために クラスタリングで10のグループに分割するというタスクを考えます。
異なる特徴量を用いた場合のクラスタリングの評価をどう比較しようかという問題があります。 同じ特徴量であればエルボー法で使うような残差平方和が使えますが、今回は比較したい対象同士で特徴量の数が異なります。 なので今回は映画の嗜好でクラスタリングをした場合、年齢や性別もそれなりに別れるはずだという仮定のもと、 クラスタリングには用いていないユーザに紐づく変数の性別(2カテゴリ)と年代(7カテゴリ)をダミー化した特徴の残差平方和で評価を行うことにします。
列方向の次元削減を全く行わない場合と、PCAで削減する特徴量数を変化させた場合の試行を行った結果、それぞれの残差平方和と所要時間は以下のようになりました。
手法 | 特徴量数 | 残差平方和 | 所要時間(s) |
---|---|---|---|
kmeans | 3706 | 7002 | 32.1 |
PCA+kmeans | 1000 | 7003 | 18.5 |
PCA+kmeans | 500 | 6972 | 10.1 |
PCA+kmeans | 100 | 7021 | 4.1 |
PCA+kmeans | 50 | 6986 | 2.6 |
PCA+kmeans | 10 | 6978 | 2.1 |
実験コードは下記になります。
考察
今回の結果だとPCAで次元を削減してもしなくても残差平方和はあまり変わりませんでした。 評価指標があまりよくなかったのかもしれませんが、このへんはデータ依存性が強い気がしています。 ただ、処理時間は削減した次元数に応じて小さくなるので、データ量が巨大で処理時間を気にする必要がある場合には有効に働く可能性がありそうです。