大きなデータセットがあり、次元削減を実行したい。
今ではどこでも、PCAをこれに使用できると読んでいます。ただし、PCAを計算/実行した後、何をすべきかまだわかりません。Rでは、これはコマンドで簡単に行えprincomp
ます。
しかし、PCAを計算した後はどうすればよいでしょうか?最初の主成分を使用することにした場合、データセットを正確に削減するにはどうすればよいですか?
大きなデータセットがあり、次元削減を実行したい。
今ではどこでも、PCAをこれに使用できると読んでいます。ただし、PCAを計算/実行した後、何をすべきかまだわかりません。Rでは、これはコマンドで簡単に行えprincomp
ます。
しかし、PCAを計算した後はどうすればよいでしょうか?最初の主成分を使用することにした場合、データセットを正確に削減するにはどうすればよいですか?
回答:
質問であなたが得ているのは、少数の主成分(PC)を使用したデータの切り捨てに関するものだと思います。このような操作の場合prcomp
、再構成で使用される行列乗算を視覚化する方が簡単であるという点で、この関数はより具体的であると思います。
まず、合成データセットXt
を指定し、PCAを実行します(通常、共分散行列に関連するPCを記述するためにサンプルを中央に配置します。
#Generate data
m=50
n=100
frac.gaps <- 0.5 # the fraction of data with NaNs
N.S.ratio <- 0.25 # the Noise to Signal ratio for adding noise to data
x <- (seq(m)*2*pi)/m
t <- (seq(n)*2*pi)/n
#True field
Xt <-
outer(sin(x), sin(t)) +
outer(sin(2.1*x), sin(2.1*t)) +
outer(sin(3.1*x), sin(3.1*t)) +
outer(tanh(x), cos(t)) +
outer(tanh(2*x), cos(2.1*t)) +
outer(tanh(4*x), cos(0.1*t)) +
outer(tanh(2.4*x), cos(1.1*t)) +
tanh(outer(x, t, FUN="+")) +
tanh(outer(x, 2*t, FUN="+"))
Xt <- t(Xt)
#PCA
res <- prcomp(Xt, center = TRUE, scale = FALSE)
names(res)
結果またはprcomp
で、PC(res$x
)、固有値(res$sdev
)、各PCの大きさに関する情報、および負荷(res$rotation
)を確認できます。
res$sdev
length(res$sdev)
res$rotation
dim(res$rotation)
res$x
dim(res$x)
固有値を二乗することにより、各PCによって説明される分散を取得します。
plot(cumsum(res$sdev^2/sum(res$sdev^2))) #cumulative explained variance
最後に、主要な(重要な)PCのみを使用して、データの切り捨てられたバージョンを作成できます。
pc.use <- 3 # explains 93% of variance
trunc <- res$x[,1:pc.use] %*% t(res$rotation[,1:pc.use])
#and add the center (and re-scale) back to data
if(res$scale != FALSE){
trunc <- scale(trunc, center = FALSE , scale=1/res$scale)
}
if(res$center != FALSE){
trunc <- scale(trunc, center = -1 * res$center, scale=FALSE)
}
dim(trunc); dim(Xt)
結果は、わずかに滑らかなデータマトリックスであり、小規模の機能は除外されていることがわかります。
RAN <- range(cbind(Xt, trunc))
BREAKS <- seq(RAN[1], RAN[2],,100)
COLS <- rainbow(length(BREAKS)-1)
par(mfcol=c(1,2), mar=c(1,1,2,1))
image(Xt, main="Original matrix", xlab="", ylab="", xaxt="n", yaxt="n", breaks=BREAKS, col=COLS)
box()
image(trunc, main="Truncated matrix (3 PCs)", xlab="", ylab="", xaxt="n", yaxt="n", breaks=BREAKS, col=COLS)
box()
また、prcomp関数の外部で実行できる非常に基本的なアプローチを次に示します。
#alternate approach
Xt.cen <- scale(Xt, center=TRUE, scale=FALSE)
C <- cov(Xt.cen, use="pair")
E <- svd(C)
A <- Xt.cen %*% E$u
#To remove units from principal components (A)
#function for the exponent of a matrix
"%^%" <- function(S, power)
with(eigen(S), vectors %*% (values^power * t(vectors)))
Asc <- A %*% (diag(E$d) %^% -0.5) # scaled principal components
#Relationship between eigenvalues from both approaches
plot(res$sdev^2, E$d) #PCA via a covariance matrix - the eigenvalues now hold variance, not stdev
abline(0,1) # same results
さて、どのPCを保持するかを決定することは別の質問です- 私はしばらく前に興味を持っていました。お役に立てば幸いです。
prcomp
そうしてくれます。見ているres$center
とres$scale
。私見では、これらの(中心または/への明示的な呼び出しの間でスケーリングされていないかについての偶然の違いを使用する傾向が少ない誤差であるscale
とprcomp
コール)。
what to do after calculating the PCA
かをhow do I reduce my dataset exactly
?OPが彼のサンプルでPCAを実施したことを考えると、彼の質問はそれをどうするか、そしてこのサブサンプルで実際に何が起こるかです。PCAのやり方ではありません。E <- eigen(cov(Sample)); A<- scale(scale=F, Sample) %*% E$vectors
スコアを取得する別の方法を取得することを提案することもできます(実際には、princompが実行しますstats:::princomp.default
)。
実際には、PCAを使用して、PCの投影(「スコア」)を元のサンプルの代理データとして使用しています。スコアに対してすべての分析を行い、その後、PCを使用して元のサンプルを再構築し、元のスペースで起こったことを確認します(これは基本的に主成分回帰です)。明らかに、固有ベクトル(「ローディング」)を意味のあるインタープリターにできる場合は、さらに優れた位置にいます:そのローディングを直接推論することにより、そのローディングによって提示される変化のモードでサンプルに何が起こるかを記述できます。まったく再構築を気にしません。:)
一般に、「PCAの計算後」何を行うかは、分析のターゲットによって異なります。PCAは、RSS再構成基準の下で最適な、線形に独立したデータのサブサンプルを提供します。これを分類、回帰、またはその両方に使用したり、前述したように、サンプルのバリエーションの有意な直交モードを認識したい場合があります。
コメント:保持するコンポーネントの数を決定するための最も素朴な方法は、任意の数などではなく、減少した次元のサンプルで保持するサンプル変動のしきい値に基づいて推定値を決定することです。3、100、200。user4959で説明したよう$loadings
に、によって生成されたリストオブジェクトのフィールドの下にあるリストの関連フィールドをチェックすることで、その累積変動をチェックできますprincomp
。
PCAを実行した後、最初の2つのコンポーネントを選択してプロットします。Rのスクリープロットを使用してコンポーネントの変動を確認できます。また、loadings = Tでサマリー関数を使用すると、コンポーネントのフィーチャの変動を特定できます。
このhttp://www.statmethods.net/advstats/factor.htmlおよび http://statmath.wu.ac.at/~hornik/QFS1/principal_component-vignette.pdfもご覧ください。
あなたが望むものを考えてみてください。PCA分析から多くのことを解釈できます。
最高のアビック