基于特征值分解协方差矩阵: 输入:数据集
X
=
{
x
1
,
x
2
,
.
.
.
,
x
n
}
X = \{x_1, x_2, ..., x_n\}
X={x1,x2,...,xn},需要降到 k 维 1) 去平均值(即去中心化),即每一位特征减去各自的平均值 2)计算协方差矩阵
1
(
n
−
1
)
X
X
T
\frac 1 {(n-1)} XX^T
(n−1)1XXT,这里除或不除样本数量 n 或 n-1 ,其实对求出的特征向量没有影响 3) 用特征值分解方法求协方差矩阵
1
(
n
−
1
)
X
X
T
\frac 1 {(n-1)} XX^T
(n−1)1XXT 的特征值或特征向量。 4)对特征值从小到大排序,选择其中最大的 k 个,然后对其对应的 k 个特征向量分别作为列向量组成特征向量矩阵P 4)将数据转换到 k 个特征向量构建的新空间中,即 Y=PX。
基于SVD分解协方差矩阵: 输入:数据集
X
=
{
x
1
,
x
2
,
.
.
.
,
x
n
}
X = \{x_1, x_2, ..., x_n\}
X={x1,x2,...,xn},需要降到 k 维 1) 去平均值(即去中心化),即每一位特征减去各自的平均值 2). 构造新的 n*m 矩阵:
X
′
=
1
n
−
1
X
T
X' = \frac 1 {\sqrt{n-1}} X^T
X′=n−11XT X’ 的每一列的均值为零。因为
X
′
T
X
′
=
1
n
−
1
X
X
T
X'^TX' = \frac 1 {n-1}XX^T
X′TX′=n−11XXT,即等于X的协方差矩阵,而主成分分析归结于求协方差矩阵的特征值和对应的单位特征向量,那么问题转化为求矩阵
X
′
T
X
′
X'^TX'
X′TX′ 的特征值和对应的单位特征向量,即对
X
′
X'
X′ 进行SVD分解求得的
V
k
T
V^T_k
VkT 为所需的 K 个主成分。
这里我们需要注意奇异值分解中求解是
X
T
X
X^TX
XTX的特征值特征向量。
3). 对矩阵X’ 进行截断奇异值分解,得到
X
′
=
U
Σ
V
T
X' = U\Sigma V^T
X′=UΣVT 有k个奇异值、奇异向量。矩阵V 的前 k 列构成 k 个样本主成分。 4). 求 k * n 样本主成分矩阵
Y
=
V
k
T
X
Y = V_k^T X
Y=VkTX
注意到PCA仅仅使用了SVD的右奇异矩阵,没有使用的左奇异矩阵。 假设样本是
m
∗
n
m*n
m∗n 的矩阵 X, 如果我们通过了SVD找到了矩阵
X
T
X
X^TX
XTX 最大的 k 个特征向量组成的 k * n 的矩阵
V
T
V^T
VT ,则可以做如下处理:可以得到一个 m * k 的矩阵
X
m
∗
k
′
=
X
m
∗
n
V
n
∗
k
T
X'_{m*k} = X _{m*n}V_{n*k}^T
Xm∗k′=Xm∗nVn∗kT
这个矩阵原来 m * n 的矩阵 X 相比,列数从 n 见到了 k,可见对列数进行了压缩,也就是说,左奇异矩阵可以用于对行数的压缩;右奇异矩阵可以用于对列(即特征维度)的压缩。这就是我们用SVD分解协方差矩阵实现PCA可以得到两个方向的 PCA 降维(即行和列两个方向)
总体与样本主成分分析
总体主成分:在数据总体上进行的主成分分析 样本主成分: 在有限样本上进行的主成分分析
区别: 样本主成分用样本的均值向量
Z
‾
\overline{Z}
Z 代替总体主成分均值向量
μ
\mu
μ。 用协方差矩阵 S 代替总体方差矩阵
Σ
\Sigma
Σ。
Z
‾
=
1
n
∑
j
=
1
n
z
j
=
(
z
‾
1
,
z
‾
2
,
.
.
.
,
z
‾
m
)
S
=
[
s
i
j
]
s
i
j
=
1
n
−
1
∑
k
=
1
n
(
z
i
k
−
z
‾
i
)
(
z
j
k
−
z
‾
j
)
,
i
,
j
=
1
,
2
,
.
.
.
m
/
\overline{Z} = \frac 1 n \sum_{j=1}^n z_j = (\overline{z}_1,\overline{z}_2,...,\overline{z}_m)\\ S = [s_{ij}]\\ s_{ij} = \frac 1 {n-1} \sum_{k=1}^n (z_{ik} - \overline{z}_i) (z_{jk} - \overline{z}_j), i,j = 1,2,...m/
Z=n1j=1∑nzj=(z1,z2,...,zm)S=[sij]sij=n−11k=1∑n(zik−zi)(zjk−zj),i,j=1,2,...m/