1
大型稀疏矩阵上的降维(SVD或PCA)
/ edit:现在可以进行进一步跟进,您可以使用irlba :: prcomp_irlba / edit:跟进我自己的帖子。 irlba现在具有“中心”和“比例”自变量,可用于计算主成分,例如: 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:B_miner引起我注意的“ …