nonpca<-nsprcomp(data,ncomp=i,nneg=TRUE,scale.= TRUE)
names(nonpca)
SumPC<-rowSums(nonpca$rotation)
w<-(SumPC)/sum(SumPC)
我的資料是一個 csv 檔案并且是同一個檔案,每次我運行它時都會得到不同的 PC 值。ncomp = i 從 1:9 開始執行 for 回圈
uj5u.com熱心網友回復:
如果您查看nsprcomp的幫助頁面,它會寫道
這個包實作了兩個非負和/或稀疏 PCA 演算法,這些演算法植根于 PCA 概率生成模型的期望最大化 (EM) (Sigg and Buhmann, 2008)。nsprcomp 演算法也可以描述為將軟閾值算子應用于眾所周知的冪迭代方法來計算特征值。
如果您習慣于使用 prcomp 或 princomp 計算 PCA,這些使用 SVD 或協方差矩陣的特征值,如本文所述,因此它是確定性的,每次都會回傳相同的值。
還有其他依賴于 EM 方法的計算 PC 的方法,您也可以查看這篇論文。解決方案不是確定性的,但是當您的資料集很大時,這是一個很好的權衡,如 nsprcomp 的幫助頁面中所述:
nsprcomp 演算法適用于大資料集和高維資料集,因為它完全避免了計算協方差矩陣。因此它特別適用于特征數量超過觀察數量的情況。
你會看到你的大部分電腦都非常接近,可能標志翻轉了。如果您想要可重現的 PC,您可以設定種子:
set.seed(111)
head(nsprcomp(mtcars)$x[,1:2])
PC1 PC2
Mazda RX4 -79.595868 -2.152978
Mazda RX4 Wag -79.598008 -2.168224
Datsun 710 -133.895409 5.022698
Hornet 4 Drive 8.528272 -44.983404
Hornet Sportabout 128.694362 -30.783879
Valiant -23.211004 -35.112577
但一定要檢查引數nrestart以確保您沒有達到區域最大值:
nrestart: the number of random restarts for computing the principal
component via expectation-maximization (EM) iterations. The
solution achieving maximum standard deviation over all random
restarts is kept. A value greater than one can help to avoid
poor local maxima.
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/368533.html
