使用同一数据集实现nsprcomp时得到不同PC值的问题咨询
运行nsprcomp每次得到不同PC值的原因
- 算法本身的迭代优化存在随机性:当你设置
nneg=TRUE启用非负主成分分析模式时,该算法没有普通PCA的闭式解析解,需要通过迭代优化求解带非负约束的目标函数。算法默认对初始载荷矩阵做随机初始化,每次运行的初始值不同,大概率会收敛到不同的局部最优解,最终输出的PC值就会存在差异。 - 遍历调用逻辑放大了随机性:你在for循环中每次计算i个主成分时,都是单独重新调用
nsprcomp重新训练,每轮调用都会重新生成随机初始值,不会复用前一次的计算结果,进一步导致每次完整运行的输出都不固定。
复现固定结果的方案
在调用nsprcomp前设置固定随机种子即可,修改后的代码示例如下:
# 固定随机种子,数值可自定义,只要保持一致就能复现结果 set.seed(123) nonpca<-nsprcomp(data,ncomp=i,nneg=TRUE,scale.= TRUE) names(nonpca) SumPC<-rowSums(nonpca$rotation) w<-(SumPC)/sum(SumPC)
内容的提问来源于stack exchange,提问作者user1234556
相关产品推荐
相关产品推荐

