数据科学与R语言R语言与统计分析大数据,机器学习,人工智能

主成分分析PCA For R(工事中)

2019-06-07  本文已影响4人  Jason数据分析生信教室

5月31日 12:00 小雨

1.主成分分析原理

翻了很多帖子没有一个可以直接看懂的,每个帖子的说法用词虽然略微不一样,切入点都差不多,感觉都是从一个地方抄过来稍加修改而已。特别是从协方差忽然就切入特征值特征向量,让数学门外汉摸不着头脑。

参考书:<多変量解析II 主成分分析 理論とRによる演習>

关键词:
1.协方差矩阵
2.特征向量,特征值
  1. 投影X最大(为了实现最小数据损失)
  2. 主成分向量l必须是单位直交向量

这样就把协方差矩阵和特征值特征向量之间的关系给连起来了。原来并不是人家说的不明白,是自己数学知识不够,之前没听说过拉格朗日定理。详细推导过程了解一下就好,完全没有必要记住甚至钻牛角尖。只要明白为什么求主成分忽然变成了求协方差矩阵的特征值和特征向量就好

2. R语言实现

不使用自带函数,手动计算

Z<-as.matrix(mtcars)
n<-nrow(Z)
Z_scl<-scale(Z)
S<-(1/(n-1))*t(Z_scl)%*%Z_scl #各个维度的写相关矩阵,本数据有11各变量
> head(S)
            mpg        cyl       disp         hp       drat         wt        qsec         vs
mpg   1.0000000 -0.8521620 -0.8475514 -0.7761684  0.6811719 -0.8676594  0.41868403  0.6640389
cyl  -0.8521620  1.0000000  0.9020329  0.8324475 -0.6999381  0.7824958 -0.59124207 -0.8108118
disp -0.8475514  0.9020329  1.0000000  0.7909486 -0.7102139  0.8879799 -0.43369788 -0.7104159
hp   -0.7761684  0.8324475  0.7909486  1.0000000 -0.4487591  0.6587479 -0.70822339 -0.7230967
drat  0.6811719 -0.6999381 -0.7102139 -0.4487591  1.0000000 -0.7124406  0.09120476  0.4402785
wt   -0.8676594  0.7824958  0.8879799  0.6587479 -0.7124406  1.0000000 -0.17471588 -0.5549157
             am       gear       carb
mpg   0.5998324  0.4802848 -0.5509251
cyl  -0.5226070 -0.4926866  0.5269883
disp -0.5912270 -0.5555692  0.3949769
hp   -0.2432043 -0.1257043  0.7498125
drat  0.7127111  0.6996101 -0.0907898
wt   -0.6924953 -0.5832870  0.4276059

Eigen_value<-eigen(S) #11组特征值 以及 相对应的特征向量
Z_score<-Z_scl %*% Eigen_value$vectors #Z标准化后的主成分得点
> head(Z_score)
                         [,1]       [,2]       [,3]        [,4]       [,5]        [,6]
Mazda RX4          0.64686274 -1.7081142 -0.5917309  0.11370221  0.9455234  0.01698737
Mazda RX4 Wag      0.61948315 -1.5256219 -0.3763013  0.19912121  1.0166807  0.24172464
Datsun 710         2.73562427  0.1441501 -0.2374391 -0.24521545 -0.3987623  0.34876781
Hornet 4 Drive     0.30686063  2.3258038 -0.1336213 -0.50380035 -0.5492089 -0.01929700
Hornet Sportabout -1.94339268  0.7425211 -1.1165366  0.07446196 -0.2075157 -0.14919276
Valiant            0.05525342  2.7421229  0.1612456 -0.97516743 -0.2116654  0.24383585
                         [,7]         [,8]        [,9]       [,10]       [,11]
Mazda RX4         -0.42648652  0.009631217  0.14642303 -0.06670350 -0.17969357
Mazda RX4 Wag     -0.41620046  0.084520213  0.07452829 -0.12692766 -0.08864426
Datsun 710        -0.60884146 -0.585255765 -0.13122859  0.04573787  0.09463291
Hornet 4 Drive    -0.04036075  0.049583029  0.22021812 -0.06039981 -0.14761127
Hornet Sportabout  0.38350816  0.160297757 -0.02117623 -0.05983003 -0.14640690
Valiant           -0.29464160 -0.256612420 -0.03222907 -0.20165466 -0.01954506

plot(Z_score[,1],Z_score[,2],col="red",pch=1) #PC1和PC2的plot
PC1&PC2
root_eigen<-sqrt(Eigen_value$values) #开方特征值
loading_score<-root_eigen * Eigen_value$vectors #特征值的开方*各特征向量
loading_label<-c(1:11) #给每各变量指定标签
loading_data<-data.frame(loading_score,loading_label)  
plot(loading_data$X1,loading_data$X2,col=loading_label,pch=loading_label) 
#各变量与PC1,PC2的相关图
Loading Score of PC1&PC2

prcomp( )函数

难度瞬间降低,不要忘了标准化数据scale=TRUE

函数: prcomp( )
$x: 主成分得点
$sdev: 特征值的平方根
$rotation: 特征向量
$center: 各维度的平均值

1.到此差不多大功告成,不得再次吐槽一下简书的Markdown,不能改字体,数据显示的太别扭了。
2.PCA数据优雅可视化的话需要用ggplot,放到以后再说吧。

3. 根据 prcomp( ) 自编可计算Loading Score的函数(工事中)

4. 在生物统计学上的应用(工事中)

上一篇下一篇

猜你喜欢

热点阅读