主成分分析(PCA)是一种常用的无监督学习方法,利用 正交变换把由 线性相关变量表示的观测数据转换为几个由 线性无关变量表示的数据。线性无关的变量称为主成分。主成分的个数通常小于原始变量的个数,所以PCA是一种降维算法。
实现方式与几何解释
主成分分析步骤如下:
(1)对给定数据进行规范化,使得数据每一变量的平均值为0,方差为1。
(2)对数据进行正交变换,原来由线性相关变量表示的数据,通过正交变换变成由若干个线性无关的新变量表示的数据。
新变量是可能的正交变换中变量的方差的和(信息保存)最大的,方差表示在新变量上信息的大小。将新变量依次称为第一主成分、第二主成分等。
举例说明:
设数据在原坐标系由变量 x 1 x_1 x1和 x 2 x_2 x2 表示,如图(a)。PCA对数据进行正交变换(对原坐标系进行旋转变换),通过正交变换后,在新坐标系里,由变量 y 1 y_1 y1和 y 2 y_2 y2表示。主成分分析选择方差最大的方向(第一主成分)作为新坐标系的第一坐标轴,即 y 1 y_1 y1 。之后选择与第一坐标轴 y 1 y_1 y1 正交,且方差次之的方向(第二主成分)作为新坐标系的第二坐标轴,即 y 2 y_2 y2 轴,如图(b)。在新坐标系里,数据中的变量 y 1 y_1 y1 和 y 2 y_2 y2 是线性无关的。
那么怎么样才能确定方差最大呢?设坐标系由变量 x 1 x_1 x1和 x 2 x_2 x2 表示,三个样本点A、B、C。对坐标轴进行旋转变换得到新的坐标轴 y 1 y_1 y1。样本点A,B,C在 y 1 y_1 y1上投影得到 A ′ , B ′ , C ′ A',B',C' A′,B′,C′ 。
坐标值的平方和 O A ′ 2 + O B ′ 2 + O C ′ 2 OA'^2+OB'^2+OC'^2 OA′2+OB′2+OC′2 ,表示样本在变量 y 1 y_1 y1 上的方差和。主成分分析旨在选取正交变换中方差最大的变量作为第一主成分,也就是旋转变换中坐标值的平方和最大的值轴。在旋转变换中样本点到原点的距离的平方和 O A 2 + O B 2 + O C 2 OA^2+OB^2+OC^2 OA2+OB2+OC2 保持不变。由勾股定理可知: 坐标值的平方和 O A ′ 2 + O B ′ 2 + O C ′ 2 OA'^2+OB'^2+OC'^2 OA′2+OB′2+OC′2 最大等价于样本到 y 1 y_1 y1 轴的距离的平方和 A A ′ 2 + B B ′ 2 + C C ′ 2 AA'^2+BB'^2+CC'^2 AA′2+BB′2+CC′2 最小。所以,第一主成分是指在旋转变换中选取离样本点的距离平方和最小的轴。第二主成分的选取要保证与已选坐标轴正交的条件下,类似进行。
定义
线性变换的协方差(相关)矩阵
假设数据样本矩阵
X
X
X 如下:
X
=
[
x
1
x
2
…
x
n
]
=
[
x
11
x
12
⋯
x
1
n
x
21
x
22
⋯
x
2
n
⋮
⋮
⋱
⋮
x
m
1
x
m
2
⋯
x
m
n
]
X=[\textbf x_1\quad \textbf x_2 \quad \ldots \textbf x_n]=\begin{bmatrix}x_{11} & x_{12} & \cdots & x_{1n} \\x_{21} & x_{22} & \cdots & x_{2n} \\ \vdots & \vdots & \ddots & \vdots \\x_{m1} & x_{m2} & \cdots\ & x_{mn} \\\end{bmatrix}
X=[x1x2…xn]=⎣⎢⎢⎢⎡x11x21⋮xm1x12x22⋮xm2⋯⋯⋱⋯ x1nx2n⋮xmn⎦⎥⎥⎥⎤
其中,
x
⃗
j
=
(
x
1
j
,
x
2
j
,
…
,
x
m
j
)
\vec x_j =(x_{1j},x_{2j},\ldots,x_{mj})
xj=(x1j,x2j,…,xmj) 表示第
j
j
j 个观测样本(每一列均表示一个样本,一共n个样本,每个样本m个特征)。
样本均值为:
x
ˉ
=
1
n
∑
j
=
1
n
x
j
\bar{\textbf x}=\frac{1}{n}\sum\limits_{j=1}^n \textbf x_j
xˉ=n1j=1∑nxj
样本的协方差矩阵
S
S
S为:
S
=
[
s
i
j
]
m
×
m
s
i
j
=
1
n
−
1
∑
k
=
1
n
(
x
i
k
−
x
ˉ
i
)
(
x
j
k
−
x
ˉ
j
)
,
i
,
j
=
1
,
2
,
…
,
m
S = [s_{ij}]_{m\times m}\\ s_{ij} = \frac{1}{n-1} \sum_{k=1}^n(x_{ik} - \bar x_i)(x_{jk} - \bar x_j),\quad i,j=1,2,\ldots,m
S=[sij]m×msij=n−11k=1∑n(xik−xˉi)(xjk−xˉj),i,j=1,2,…,m
其中,
x
ˉ
i
=
1
n
∑
k
=
1
n
x
i
k
\bar x_i = \frac{1}{n} \sum_{k=1}^n x_{ik}
xˉi=n1∑k=1nxik
样本的相关矩阵
R
R
R 为:
R
=
[
r
i
j
]
m
×
m
r
i
j
=
s
i
j
s
i
i
s
j
j
R = [r_{ij}]_{m\times m} \\ r_{ij} = \frac{s_{ij}}{\sqrt{s_{ii}s_{jj}}}
R=[rij]m×mrij=siisjjsij
定义 m 维向量
x
=
(
x
1
,
x
2
…
,
x
m
)
T
x=(x_1,x_2\ldots,x_m)^T
x=(x1,x2…,xm)T 到 m 维向量
y
=
(
y
1
,
y
2
,
…
,
y
m
)
T
y=(y_1,y_2,\ldots,y_m)^T
y=(y1,y2,…,ym)T 的线性变换:
y
=
A
T
x
\textbf y = A^T \textbf x
y=ATx
其中:
A
=
[
a
1
a
2
…
a
m
]
=
[
a
11
a
12
⋯
a
1
n
a
21
a
22
⋯
a
2
n
⋮
⋮
⋱
⋮
a
m
1
a
m
2
⋯
a
m
n
]
A = [a_1 \quad a_2 \ldots a_m] = \begin{bmatrix}a_{11} & a_{12} & \cdots & a_{1n} \\a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\a_{m1} & a_{m2} & \cdots\ & a_{mn} \\\end{bmatrix} \\
A=[a1a2…am]=⎣⎢⎢⎢⎡a11a21⋮am1a12a22⋮am2⋯⋯⋱⋯ a1na2n⋮amn⎦⎥⎥⎥⎤
对于任意一个线性变换:
y
i
=
a
i
T
x
=
a
1
i
x
1
+
a
2
i
x
2
+
…
+
a
m
i
x
m
,
i
=
1
,
2
…
,
m
y_i = a_i^T \textbf x = a_{1i}x_1+a_{2i}x_2+ \ldots + a_{mi}x_m, \quad i=1,2\ldots,m
yi=aiTx=a1ix1+a2ix2+…+amixm,i=1,2…,m
y
i
y_i
yi 是m维向量
y
\textbf y
y 的第
i
i
i 个变量,其样本均值为:
y
ˉ
i
=
1
n
∑
j
=
1
n
a
i
T
x
j
=
a
i
T
x
ˉ
x
ˉ
=
1
n
∑
j
=
1
n
x
j
\bar y_i = \frac{1}{n} \sum_{j=1}^n a_i^T \textbf x_j = a_i^T \bar{\textbf x} \\ \bar{\textbf x}=\frac{1}{n}\sum\limits_{j=1}^n \textbf x_j
yˉi=n1j=1∑naiTxj=aiTxˉxˉ=n1j=1∑nxj
y
i
y_i
yi 的样本方差
v
a
r
(
y
i
)
var(y_i)
var(yi) 为:
v
a
r
(
y
i
)
=
1
n
−
1
∑
j
=
1
n
(
a
i
T
x
j
−
a
i
T
x
ˉ
)
2
=
a
i
T
[
1
n
−
1
∑
j
=
1
n
(
x
j
−
x
ˉ
)
(
x
j
−
x
ˉ
)
T
]
a
i
=
a
i
T
S
a
i
\begin{aligned} var(y_i) &= \frac{1}{n-1} \sum_{j=1}^n(a_i^T \textbf x_j - a_i^T \bar {\textbf x} )^2 \\ &= a_i^T \left[ \frac{1}{n-1} \sum_{j=1}^n(\textbf x_j - \bar{\textbf x})(\textbf x_j - \bar{\textbf x})^T \right] a_i \\ &=a_i^TSa_i \end{aligned}
var(yi)=n−11j=1∑n(aiTxj−aiTxˉ)2=aiT[n−11j=1∑n(xj−xˉ)(xj−xˉ)T]ai=aiTSai
推广:对任意两个线性变换
y
i
=
α
i
T
x
y
k
=
α
k
T
x
y_i=\alpha_i^T \textbf x \quad y_k=\alpha_k^T \textbf x
yi=αiTxyk=αkTx ,其协方差为:
c
o
v
(
y
i
,
y
k
)
=
a
i
T
S
a
k
cov(y_i, y_k) = a_i^TSa_k
cov(yi,yk)=aiTSak
定义
给定样本矩阵 X X X。
第一主成分: y 1 = a 1 T x y_1 = a_1^T \textbf x y1=a1Tx 是在 a 1 T a 1 = 1 a_1^Ta_1=1 a1Ta1=1 的条件下,使得 a 1 T x j a_1^T x_j a1Txj 的样本方差 a 1 T S a 1 a_1^TSa_1 a1TSa1 最大的 x \textbf x x 的线性变换。
第二主成分: y 2 = a 2 T x y_2 = a_2^T \textbf x y2=a2Tx 除了要满足 a 2 T a 2 = 1 a_2^Ta_2=1 a2Ta2=1 ,还要满足 a 1 T x j a_1^T x_j a1Txj 与 a 2 T x j a_2^T x_j a2Txj 的协方差 a 1 T S a 2 = 0 a_1^TSa_2=0 a1TSa2=0 的条件下,使得 a 2 T x j a_2^T x_j a2Txj 的样本方差 a 2 T S a 2 a_2^TSa_2 a2TSa2 最大的 x \textbf x x 的线性变换。
推广:第 i i i 主成分: y i = a i T x y_i = a_i^T \textbf x yi=aiTx 是在 a i T a i = 1 a_i^Ta_i=1 aiTai=1 和 a i T x j a_i^T x_j aiTxj 与 a k T x j a_k^T x_j akTxj 的协方差 a k T S a i = 0 a_k^TSa_i=0 akTSai=0 的条件下,使得 a i T x j a_i^T x_j aiTxj 的样本方差 a i T S a i a_i^TSa_i aiTSai 最大的 x \textbf x x 的线性变换。
使用主成分分析时,要先对数据进行规范化,即:
x
i
j
=
x
i
j
−
x
i
ˉ
s
i
i
x_{ij} = \frac{x_{ij} - \bar{x_i}}{\sqrt{s_{ii}}}
xij=siixij−xiˉ
此时,样本的协方差矩阵S 就是样本的相关矩阵 R:
R
=
1
n
−
1
X
X
T
R = \frac{1}{n-1} X X^T
R=n−11XXT
相关矩阵的特征值分解算法
(1)先对数据进行规范化处理,得到规范化矩阵 X X X。
(2)计算 X X X 的相关矩阵 R R R (协方差矩阵S)。
(3)求样本相关矩阵 R 的 k k k 个特征值: λ 1 ≥ λ 2 ≥ … ≥ λ m \lambda_1 \ge \lambda_2 \ge \ldots \ge \lambda_m λ1≥λ2≥…≥λm 和对应的 k k k 个单位特征向量: a 1 , a 2 , … a m a_1,a_2,\ldots a_m a1,a2,…am 。
(4)求样本主成分:
y
=
A
T
x
\textbf y = A^T \textbf x
y=ATx
其中
A
=
[
a
1
a
2
…
a
m
]
A = [a_1 \quad a_2 \ldots a_m]
A=[a1a2…am]
(5)计算第
k
k
k主成分的方差贡献率:
η
k
=
λ
k
∑
i
=
1
m
λ
i
\eta_k = \frac{\lambda_k}{\sum_{i=1}^m \lambda_i}
ηk=∑i=1mλiλk