1
大規模なスパース行列の次元削減(SVDまたはPCA)
/ edit:irlba :: prcomp_irlbaを使用できるようになりました。 / edit:自分の投稿のフォローアップ。 irlba現在、「center」および「scale」引数があり、これを使用して主成分を計算できます。例: pc <- M %*% irlba(M, nv=5, nu=0, center=colMeans(M), right_only=TRUE)$v Matrix機械学習アルゴリズムで使用したい機能の大規模でまばらなものがあります。 library(Matrix) set.seed(42) rows <- 500000 cols <- 10000 i <- unlist(lapply(1:rows, function(i) rep(i, sample(1:5,1)))) j <- sample(1:cols, length(i), replace=TRUE) M <- sparseMatrix(i, j) このマトリックスには多くの列があるため、その次元を管理しやすいものに減らしたいと思います。優れたirlbaパッケージを使用してSVDを実行し、最初のn個の主要コンポーネントを返すことができます(ここに示す5つ。実際のデータセットではおそらく100または500を使用します)。 library(irlba) pc <- irlba(M, nu=5)$u ただし、PCAを実行する前に、行列を中央に配置する必要があることを読みました(各列から列の平均値を減算します)。これは私のデータセットで行うことは非常に難しく、さらにマトリックスのスパース性を破壊します。 スケーリングされていないデータに対してSVDを実行し、それを機械学習アルゴリズムに直接入力するのはどの程度「悪い」のでしょうか?マトリックスのスパース性を維持しながら、このデータをスケーリングできる効率的な方法はありますか? / edit:AはB_minerによって注目されました。「PC」は次のようになります。 …