由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Statistics版 - 请教PCA
相关主题
用PCA的时候,如果P比N大怎么办啊?请问哪里有PCA的SAS code 啊
how to Use PCA to get eignen vector and eigen valueSAS包子请教 - use PCA to create an index
PCA 分析请教PCA and linear regression
有没有熟悉 proc princomp的童鞋啊?PCA作图
请问如何测PCA里某两个eigen value是相同的?谢谢!请牛人帮帮忙
急,比较两组数据,globally and individually, 包子!请问,要用standard score(z) 作data normalization。
multvariate normal distributionordinary linear regression assume数据是Normal distribution么?
求个 normalized euclidean distance 的公式怎么判别一个分布是不是NORMAL的???
相关话题的讨论汇总
话题: pca话题: cor话题: data话题: princomp话题: eigen
进入Statistics版参与讨论
1 (共1页)
h******a
发帖数: 198
1
R里PCA的命令是princomp(data, cor=TRUE)。cor=TRUE是用correlation matrix来做
PCA。问题是,我用princomp(data, cor=TRUE)$score得到的principal component和自
己算的差的有点远。不知道哪里错了?附件是data
我自己是这样算的:
data是1256 x 8的matrix,一行是一个observation。用eigen()函数算data的
correlation matrix的单位化正交特征向量,每一列是一个特征向量,按特征值大小排
好序。最后用data * eigen,理论上也应该是component。
code:
score<-princomp(data,cor=TRUE)$scores
cor_pca<-cor(data)
score1<-data%*%eigen(cor_pca)$vectors
s*****n
发帖数: 2174
2
PCA在做之前, 要把矩阵normalize.
princomp里面自动包含了这个过程
你自己用特征值计算之前要自己做.
用 scale() 函数就可以.

【在 h******a 的大作中提到】
: R里PCA的命令是princomp(data, cor=TRUE)。cor=TRUE是用correlation matrix来做
: PCA。问题是,我用princomp(data, cor=TRUE)$score得到的principal component和自
: 己算的差的有点远。不知道哪里错了?附件是data
: 我自己是这样算的:
: data是1256 x 8的matrix,一行是一个observation。用eigen()函数算data的
: correlation matrix的单位化正交特征向量,每一列是一个特征向量,按特征值大小排
: 好序。最后用data * eigen,理论上也应该是component。
: code:
: score<-princomp(data,cor=TRUE)$scores
: cor_pca<-cor(data)

h******a
发帖数: 198
3
但我用的是data的correlation matrix来算特征向量,应该和normalized的结果是一样
的吧?
s*****n
发帖数: 2174
4
对啊, princomp() 就自动为你做了.
可是你自己分解特征值那样算的时候, 也要相应的normalize啊.

【在 h******a 的大作中提到】
: 但我用的是data的correlation matrix来算特征向量,应该和normalized的结果是一样
: 的吧?

h******a
发帖数: 198
5
我用eigen()的时候 用的是data的correlation matrix来分解 不是covariance矩阵。
不需要normailzed了吧
l********s
发帖数: 430
6
我记得r里面还有一个prcomp的,和princomp有些不一样。
s*****n
发帖数: 2174
7
你的eigen()是没问题啊, 可是最后一步和data 相乘的时候, data是没有经过normaliz
ed的.

【在 h******a 的大作中提到】
: 我用eigen()的时候 用的是data的correlation matrix来分解 不是covariance矩阵。
: 不需要normailzed了吧

s*****n
发帖数: 2174
8
本质是一回事, 一个使用的是eigen value decomposition, 另一个是singular value
decomposition. 两个都可以.
两个对variance的估计, 稍微有点差别.

【在 l********s 的大作中提到】
: 我记得r里面还有一个prcomp的,和princomp有些不一样。
h******a
发帖数: 198
9
哦 果然如此。。。多谢~~~
不过,实际上我们想要的不应该是原始的data和特征向量相乘的结果吗?

normaliz

【在 s*****n 的大作中提到】
: 你的eigen()是没问题啊, 可是最后一步和data 相乘的时候, data是没有经过normaliz
: ed的.

s*****n
发帖数: 2174
10
PCA本质上就是高维变量空间的一个旋转, 这里包含不同维度之间的加权问题. 根据情况
不同, 你可以选择normalize或者不normalize, 但是要一致. 你把correlation matrix
进行 eigen value decomposition, 表示你认为各个维度是等权重的(normalized), 也
就是说的计算是在一个adjusted scaled空间里面. 但是你乘的data没有经过normalize
还是在原始空间里面. 这两个不能乘在一起.
如果你是直接eigen(cov(data)), 就可以和data乘在一起了, 因为两个都是在原始变量
空间里面. 这等价于princomp(..., cor = F)
不过做PCA, 推荐用prcomp(). 这个是基于SVD的, 要比基于EVD的princomp()精度高. 而
且我觉得prcomp()的输出也要比princomp更clear.

【在 h******a 的大作中提到】
: 哦 果然如此。。。多谢~~~
: 不过,实际上我们想要的不应该是原始的data和特征向量相乘的结果吗?
:
: normaliz

h******a
发帖数: 198
11
哦 是这样 我原来以为用correlation matrix是为了结果更robust
d******e
发帖数: 7844
12
Robust是因为数据被Normalized了

【在 h******a 的大作中提到】
: 哦 是这样 我原来以为用correlation matrix是为了结果更robust
h******a
发帖数: 198
13
嗯哪 thanks all
1 (共1页)
进入Statistics版参与讨论
相关主题
怎么判别一个分布是不是NORMAL的???请问如何测PCA里某两个eigen value是相同的?谢谢!
一个很confusing的积分问题急,比较两组数据,globally and individually, 包子!
support vector machinemultvariate normal distribution
工作中遇到的一个现象,问问大家怎么解释求个 normalized euclidean distance 的公式
用PCA的时候,如果P比N大怎么办啊?请问哪里有PCA的SAS code 啊
how to Use PCA to get eignen vector and eigen valueSAS包子请教 - use PCA to create an index
PCA 分析请教PCA and linear regression
有没有熟悉 proc princomp的童鞋啊?PCA作图
相关话题的讨论汇总
话题: pca话题: cor话题: data话题: princomp话题: eigen