forked from Jaanai-Lu/Statistics
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path009. PCA、SVD
90 lines (77 loc) · 4.4 KB
/
009. PCA、SVD
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
"""
Exploratory Data Analysis:
a face that could launch a 1000 ships 描述PCA、SVD以小博大
"""
head(dataMatrix)
heatmap(dataMatrix)
myedit('addPatt.R')
rbinom(1,size=1,prob=0.5) # 抛硬币
rep(c(0,3),each=5) # 每次数字产生5个
set.seed(678910)
for(i in 1:40){
# flip a coin
coinFlip <- rbinom(1,size=1,prob=0.5)
# if coin is heads add a common pattern to that row
if(coinFlip){
# 抛硬币决定是否改变那一行,1为改变
# 改变的行,前5列不变,后5列加3
dataMatrix[i,] <- dataMatrix[i,] + rep(c(0,3),each=5)
}
}
source("addPatt.R",local = TRUE) # 运行脚本
# 奇异值分解 Singular Value Decomposition
svd(mat)
# X=UDV^t
matu %*% diag %*% t(matv) # 矩阵乘法、矩阵转置
# 对矩阵进行中心化处理,然后svd
svd(scale(mat))
# PCA
# PCA之前要进行中心化处理
prcomp(scale(mat))
# PCA of a scaled matrix yields the V matrix (right singular vectors) of the same scaled matrix.
svd1$v[,1]
svd1$d
svd2$v[,1:2]
dim(faceData) # 查看数据矩阵的大小
# 矩阵相乘以及和标量相乘的顺序以及括号
a1 <- svd1$u[,1] %*% t(svd1$v[,1]) * svd1$d[1]
# 等价于
a1 <- (svd1$u[,1] * svd1$d[1]) %*% t(svd1$v[,1])
# 当有俩个成分时,要让d成为含有俩个成分的对角矩阵
a2 <- svd1$u[,1:2] %*% diag(svd1$d[1:2]) %*% t(svd1$v[,1:2])
# PCA和SVD都是降维,因而都可以用来做数据压缩,可以用来压缩图片
myImage(svd1$u[,1:5] %*% diag(svd1$d[1:5]) %*% t(svd1$v[,1:5])) # 5个成分
myImage(svd1$u[,1:10] %*% diag(svd1$d[1:10]) %*% t(svd1$v[,1:10])) # 10个成分
# SVD:
# A matrix X has the singular value decomposition UDV^t.
# The principal components of X are the columns of V.
# U and V give us vectors and D gave us values.
# The singular values of X are the diagonal elements of D.
# D gives the singular values of a matrix in decreasing order of weight.
PCA:
1. 简述主成分分析PCA的工作原理,以及PCA的优缺点?
PCA旨在找到数据中的主成分,并利用这些主成分表征原始数据,从而达到降维的目的。
工作原理可由两个角度解释,第一个是最大化投影方差(让数据在主轴上投影的方差尽可能大);第二个是最小化平方误差(样本点到超平面的垂直距离足够近)。
做法是数据中心化之后,对样本数据协方差矩阵进行特征分解,选取前d个最大的特征值对应的特征向量,即可将数据从原来的p维降到d维,
也可根据奇异值分解来求解主成分。
优点:
1.计算简单,易于实现
2.各主成分之间正交,可消除原始数据成分间的相互影响的因素
3.仅仅需要以方差衡量信息量,不受数据集以外的因素影响
4.降维维数没有限制,可根据需要制定
缺点:
1.无法利用类别的先验信息
2.降维后,只与数据有关,主成分各个维度的含义模糊,不易于解释
3.方差小的非主成分也可能含有对样本差异的重要信息,因降维丢弃可能对后续数据处理有影响
4.线性模型,对于复杂数据集难以处理(可用核映射方式改进)
参考链接:https://www.jianshu.com/p/487818da5de3
2. PCA中有第一主成分、第二主成分,它们分别是什么,又是如何确定的?
主成分分析是设法将原来众多具有一定相关性(比如P个指标),重新组合成一组新的互相无关的综合指标来代替原来的指标。
主成分分析,是考察多个变量间相关性一种多元统计方法,研究如何通过少数几个主成分来揭示多个变量间的内部结构,
即从原始变量中导出少数几个主成分,使它们尽可能多地保留原始变量的信息,且彼此间互不相关,
通常数学上的处理就是将原来P个指标作线性组合,作为新的综合指标。
最经典的做法就是用F1(选取的第一个线性组合,即第一个综合指标)的方差来表达,即Var(F1)越大,表示F1包含的信息越多。
因此在所有的线性组合中选取的F1应该是方差最大的,故称F1为第一主成分。
如果第一主成分不足以代表原来P个指标的信息,再考虑选取F2即选第二个线性组合,
为了有效地反映原来信息,F1已有的信息就不需要再出现在F2中,用数学语言表达就是要求Cov(F1, F2)=0,则称F2为第二主成分,
依此类推可以构造出第三、第四,……,第P个主成分。