文章目录
特征表示学习
SIFT特征 – 尺度不变特征变换
算法分为四个步骤
- 在尺度空间找一些极值点
- 找一些关键点(梯度比较大)的localization
- 估计特征的方向(将旋转了的特征旋转回去,类似于做一种图像配准)
- 对关键点做描述,用一个 d d d维特征矢量
为什么需要做数据降维
- 为了可视化数据
- 维数比较低的时候,过拟合的风险比较小,有更好的泛化性
- 加速算法学习过程
线性降维
- 将数据从高维空间投影到低维空间
- 通过一个线性投影矩阵 U U U来实现
- 不同的线性降维算法就是通过不同的准则去学习U。不同的准则在于我们想要刻画数据的什么性质。比如PCA算法是想刻画数据的主成分。ICA是刻画数据的独立成分。
PCA算法
- 希望保留数据方差最大的方向
- 第一个PC:具有最大方差的方向
- 第二个PC:具有第二大方差的方向,但是第2个PC要正交于第一个PC。后面每一个PC都会与前面的PC正交。
算法步骤
- 给定一组数据,首先计算数据的均值
- 然后计算原始数据的协方差矩阵: S = 1 N ∑ n = 1 N ( x n − x ˉ ) ( x n − x ˉ ) T S = \frac{1}{N}\sum_{n=1}^{N}(x_n-\bar{x})(x_n- \bar x)^T S=N1∑n=1N(xn−xˉ)(xn−xˉ)T
- 对 D × D D \times D D×D维的协方差矩阵 S S S做特征值分解,得到 k k k个最大的特征值及其对应的特征向量作为主成分且进行特征向量的正交化
- 将正交化的向量排列得到 U = R D × K U = R^{D \times K} U=RD×K维投影矩阵
- 对于一个新样本,计算降维后的样本特征向量: y i = U T x i y_i = U^T x_i yi=UTxi
PCA:重构
-
用 k k k个主成分将原始数据重构出来
-
x ~ n = ∑ i = 1 K ( x n ⊤ u i ) u i = ∑ i = 1 K z n i u i \tilde{\mathbf{x}}_{n}=\sum_{i=1}^{K}\left(\mathbf{x}_{n}^{\top} \mathbf{u}_{i}\right) \mathbf{u}_{i}=\sum_{i=1}^{K} z_{n i} \mathbf{u}_{i} x~n=i=1∑K(xn⊤ui)ui=i=1∑Kzniui
当特征维数过高的时候怎么处理
- N < < D N << D N<<D
- 不去直接计算协方差矩阵 S = 1 N X X T ∈ R D × D S=\frac{1}{N}XX^T \in R^{D \times D} S=N1XXT∈RD×D的特征值和特征向量,而是去计算 B = 1 N X T X ∈ R N × N B = \frac{1}{N}X^TX \in R^{N \times N} B=N1XTX∈RN×N的特征值和特征向量。
- 然后利用公式 u i = 1 ( N λ i ) 2 X v i u_i = \frac{1}{(N \lambda_i)^2}Xv_i ui=(Nλi)21Xvi将我们需要的特征向量恢复出来。
PCA:最小重构误差
- PCA是所有线性投影中重构误差最小。
CCA:典型相关分析
- CCA是要找到两组变量之间的线性关系。
- CCA要找到两组基,每一个变量有一组基,两组基是为了让两组变量投影到最相关的空间。
- 这里的两组变量指的是同一个物体的两种不同的描述,这两组描述是相关的。但是这两组特征在原始空间可能看不出相关性,一定要变化之后才能找到相关性。
- CCA算法也是通过矩阵的特征值分解实现的。
算法步骤
- 分别求出第一组变量和第二组变量的协方差矩阵。
Σ 11 = 1 m − 1 ∑ i = 1 m ( x 1 ( i ) − x ˉ 1 ) ( x 1 ( i ) − x ˉ 1 ) ′ + r 1 I ( and Σ 22 ) \begin{array}{l} \Sigma_{11}=\frac{1}{m-1} \sum_{i=1}^{m}\left(x_{1}^{(i)}-\bar{x}_{1}\right)\left(x_{1}^{(i)}-\bar{x}_{1}\right)^{\prime}+r_{1} I \quad\left(\text { and } \Sigma_{22} \right.) \\ \end{array} Σ11=m−11∑i=1m(x1(i)−xˉ1)(x1(i)−xˉ1)′+r1I( and Σ22)
2.计算两组变量之间的协方差矩阵
Σ
12
=
1
m
−
1
∑
i
=
1
m
(
x
1
(
i
)
−
x
ˉ
1
)
(
x
2
(
i
)
−
x
ˉ
2
)
′
\Sigma_{12}=\frac{1}{m-1} \sum_{i=1}^{m}\left(x_{1}^{(i)}-\bar{x}_{1}\right)\left(x_{2}^{(i)}-\bar{x}_{2}\right)^{\prime}
Σ12=m−11i=1∑m(x1(i)−xˉ1)(x2(i)−xˉ2)′
- 对协方差矩阵做白化变换,将一个高斯分布变成一个标准高斯分布。
T ≜ Σ 11 − 1 / 2 Σ 12 Σ 22 − 1 / 2 T \triangleq \Sigma_{11}^{-1 / 2} \Sigma_{12} \Sigma_{22}^{-1 / 2} T≜Σ11−1/2Σ12Σ22−1/2
此时 T T T可以反映归一化之后的数据的相关性。
- 对 T T T矩阵做奇异值分解:
T = U D V ′ T=U D V^{\prime} T=UDV′
- 为了寻找最相关的子空间,就是寻找奇异值( D T D D^TD DTD的特征值)最大的基:
( Total correlation at k k k is ∑ i = 1 k D i i \sum_{i=1}^{k} D_{i i} ∑i=1kDii
- 把 U U U的前 k k k列拿出来做归一化后当作第一组变量的基 W 1 ∗ W_{1}^{*} W1∗,把 V V V的前 k k k列拿出来做归一化后当作第二组变量的基 W 2 ∗ W_{2}^{*} W2∗。
The optimal projection matrices are
(
W
1
∗
,
W
2
∗
)
=
(
Σ
11
−
1
/
2
U
k
,
Σ
22
−
1
/
2
V
k
)
\left(W_{1}^{*}, W_{2}^{*}\right)=\left(\Sigma_{11}^{-1 / 2} U_{k}, \Sigma_{22}^{-1 / 2} V_{k}\right)
(W1∗,W2∗)=(Σ11−1/2Uk,Σ22−1/2Vk)
where
U
k
U_{k}
Uk is the first
k
k
k columns of
U
U
U.
- 对 x x x计算投影后的向量: x ′ = W 1 ∗ T x x' = W_1^{*T}x x′=W1∗Tx。对 y y y计算投影后的向量: y ′ = W 2 ∗ T y y' = W_2^{*T}y y′=W2∗Ty就可以将 x x x和 y y y投影到最相关的空间。
LDA:线性判别分析
- LDA是有监督学习。找到类别之间可分性最好的方向。
- LDA的假设是每个类都是高斯分布。
Fisher判别准则
- 把两个数据都看成高斯分布,然后计算可分性,将FDR最大化。
F D R = ( μ 1 − μ 2 ) 2 σ 1 2 + σ 2 2 FDR = \frac{(\mu_1 - \mu_2)^2}{\sigma_1^2 + \sigma_2^2} FDR=σ12+σ22(μ1−μ2)2
- 让 ( μ ~ 1 − μ ~ 2 ) 2 σ ~ 1 2 + σ ~ 2 2 \frac{(\tilde \mu_1 - \tilde \mu_2)^2}{\tilde \sigma_1^2 + \tilde\sigma_2^2} σ~12+σ~22(μ~1−μ~2)2最大。
又因为:
μ
~
i
=
w
T
μ
i
\tilde \mu_i = w^T \mu_i
μ~i=wTμi。
(
μ
1
~
−
μ
2
~
)
2
=
w
T
(
μ
1
−
μ
2
)
(
μ
1
−
μ
2
)
T
w
∝
w
T
S
b
w
类
间
离
散
度
σ
~
i
2
=
E
[
(
y
−
μ
~
i
)
2
]
=
E
[
w
T
(
x
−
μ
i
)
(
x
−
μ
i
)
T
w
)
]
=
w
T
Σ
i
w
类
内
离
散
度
σ
~
1
2
+
σ
~
2
2
∝
w
T
S
w
w
\left(\tilde{\mu_{1}}-\tilde{\mu_{2}}\right)^{2}=\mathbf{w}^{T}\left(\mu_{1}-\mu_{2}\right)\left(\mu_{1}-\mu_{2}\right)^{T} \mathbf{w} \propto \mathbf{w}^{T} S_{b} \mathbf{w} ~~~~~~~ 类间离散度\\ \left.\tilde{\sigma}_{i}^{2}=E\left[\left(y-\tilde{\mu}_{i}\right)^{2}\right]=E\left[\mathbf{w}^{T}(x-\mu_i)\left(x-\mu_{i}\right)^{T} \mathbf{w}\right)\right]=\mathbf{w}^{\mathrm{T}} \boldsymbol{\Sigma}_{\mathbf{i}} \mathbf{w} \quad ~~~~~~类内离散度 \\ \tilde{\sigma}_{1}^{2} + \tilde{\sigma}_{2}^{2} \propto \mathbf{w}^{\mathrm{T}} \boldsymbol{S_w} \mathbf{w} \quad
(μ1~−μ2~)2=wT(μ1−μ2)(μ1−μ2)Tw∝wTSbw 类间离散度σ~i2=E[(y−μ~i)2]=E[wT(x−μi)(x−μi)Tw)]=wTΣiw 类内离散度σ~12+σ~22∝wTSww
- Modified Criterion for LDA:
(Raleigh Quotient) F D R ( w ) = w T S b w w T S w w \quad F D R(\mathbf{w})=\frac{\mathbf{w}^{T} S_{b} \mathbf{w}}{\mathbf{w}^{T} S_{w} \mathbf{w}} FDR(w)=wTSwwwTSbw
LDA算法步骤
假设现在是多类分类问题:
- 首先计算所有类的类内离散度, p i p_i pi是每个类别的先验概率:
S w = ∑ i = 1 C p i Σ i S_{w}=\sum_{i=1}^{C} p_{i} \Sigma_{i} Sw=i=1∑CpiΣi
- 计算类间离散度:
S b = ∑ i , j = 1 C p i p j ( μ i − μ j ) ( μ i − μ j ) ⊤ \quad S_{b}=\sum_{i, j=1}^{C} p_{i} p_{j}\left(\mu_{i}-\mu_{j}\right)\left(\mu_{i}-\mu_{j}\right)^{\top} Sb=i,j=1∑Cpipj(μi−μj)(μi−μj)⊤
- LDA降维目标准则:
max W tr { ( W ⊤ S w W ) − 1 ( W ⊤ S b W ) } \max _{W} \operatorname{tr}\left\{\left(W^{\top} S_{w} W\right)^{-1}\left(W^{\top} S_{b} W\right)\right\} Wmaxtr{(W⊤SwW)−1(W⊤SbW)}
- 上式等价于:
max W F D A ∈ R d × d ′ tr ( W F D A ⊤ S b W F D A ) s.t. W F D A ⊤ S w W F D A = I \max _{W_{\mathrm{FDA}} \in \mathbb{R}^{d \times d^{\prime}}} \operatorname{tr}\left(W_{\mathrm{FDA}}^{\top} S_{b} W_{\mathrm{FDA}}\right) \quad \text { s.t. } W_{\mathrm{FDA}}^{\top} S_{w} W_{\mathrm{FDA}}=I WFDA∈Rd×d′maxtr(WFDA⊤SbWFDA) s.t. WFDA⊤SwWFDA=I
- 对上面的式子做两步分解:
首先对
S
w
S_w
Sw做白化变换:
S
w
=
P
Λ
P
⊤
.
W
whiten
=
P
Λ
−
1
/
2
∈
R
d
×
d
W
whiten
⊤
S
w
W
whiten
=
I
.
\begin{array}{l} S_{w}=P \Lambda P^{\top} . \\ W_{\text {whiten }}=P \Lambda^{-1 / 2} \in \mathbb{R}^{d \times d} \\ W_{\text {whiten }}^{\top} S_{w} W_{\text {whiten }}=I . \end{array}
Sw=PΛP⊤.Wwhiten =PΛ−1/2∈Rd×dWwhiten ⊤SwWwhiten =I.
做PCA降维:
W
F
D
A
=
W
whiten
W
max
W
∈
R
d
×
d
′
tr
(
W
⊤
W
whiten
⊤
S
b
W
whiten
W
)
s.t.
W
⊤
W
=
I
\begin{aligned} W_{\mathrm{FDA}}=& W_{\text {whiten }} W \\ \max _{W \in \mathbb{R}^{d \times d^{\prime}}} & \operatorname{tr}\left(W^{\top} W_{\text {whiten }}^{\top} S_{b} W_{\text {whiten }} W\right) \\ & \text { s.t. } W^{\top} W=I \end{aligned}
WFDA=W∈Rd×d′maxWwhiten Wtr(W⊤Wwhiten ⊤SbWwhiten W) s.t. W⊤W=I
LDA分步算法图解
![image-20201223102118842](https://i-blog.csdnimg.cn/blog_migrate/8c116dbb30aa5301d6315ca8ca88b54e.png)
- 首先计算出所有类的类内离散度。
- 然后对所有类进行白化变换,得到一个圆形(标准)高斯分布。此时每个类别可以用其聚类中心来表示。
- 对聚类中心进行PCA降维。
- 总结:LDA = 白化 + PCA
ICA:独立成分分析
算法:非高斯最大化
- y = W x = W A s y = Wx = WAs y=Wx=WAs
其中: s s s是原始信号, A A A是混淆矩阵, W W W是恢复矩阵。 x x x是观测变量。
中心极限定理:很多个独立信号之和趋近于高斯分布。所以 A s As As变得比较像高斯,通过 W W W再混淆一下,再一次调用中心极限定理, y y y更像高斯。
只有在 y y y严格与 s s s相等时,非高斯性才最大。
整体算法
ICA任务
- 只有一个观测变量 x x x,希望学习一个 W W W矩阵,把原始信号恢复出来。
解法
- 对观测信号做白化变换,就是均值为0,方差为单位矩阵。
- 在白化之后的数据上学习 W W W矩阵去把独立成分恢复出来。
- 但是恢复出来的信号幅值和原始信号不一样。
非线性特征降维(流形学习)
非线性方法的思想是:保持局部信息
LLE:局部线性嵌入(Local Linear Embedding)
算法步骤
- 对于每个样本 x i x_i xi,确定 x i x_i xi的最近邻。
- 用邻居来重构自己,求出重构系数 W i j W_{ij} Wij
W = arg min W ∑ i = 1 N ∥ x i − ∑ j ∈ N i W i j x j ∥ 2 s.t. ∀ i ∑ j W i j = 1 W=\arg \min _{W} \sum_{i=1}^{N}\left\|\mathrm{x}_{i}-\sum_{j \in \mathcal{N}_{i}} W_{i j} \mathrm{x}_{j}\right\|^{2} \quad \text { s.t. } \forall i \quad \sum_{j} W_{i j}=1 W=argWmini=1∑N∥∥∥∥∥∥xi−j∈Ni∑Wijxj∥∥∥∥∥∥2 s.t. ∀ij∑Wij=1
N i \mathcal{N}_{i} Ni are the L L L nearest neighbors of x i \mathrm{x}_{i} xi (note: should choose L ≥ K + 1 ) \left.L \geq K+1\right) L≥K+1)
- 将上式计算好的 W W W存储起来,然后目标是得到样本的低维坐标,也即让样本的低维坐标也满足如下的重构关系:
Use
W
W
W to compute low dim. projections
Z
=
{
z
1
,
…
,
z
N
}
\mathbf{Z}=\left\{\mathbf{z}_{1}, \ldots, \mathbf{z}_{N}\right\}
Z={z1,…,zN} by solving:
Z
=
arg
min
Z
∑
i
=
1
N
∥
z
i
−
∑
j
∈
N
W
i
j
z
j
∥
2
s.t.
∀
i
∑
i
=
1
N
z
i
=
0
,
1
N
Z
Z
⊤
=
I
\mathrm{Z}=\arg \min _{\mathrm{Z}} \sum_{i=1}^{N}\left\|\mathrm{z}_{i}-\sum_{j \in \mathcal{N}} W_{i j} \mathrm{z}_{j}\right\|^{2} \quad \text { s.t. } \forall i \quad \sum_{i=1}^{N} \mathrm{z}_{i}=0, \quad \frac{1}{N} \mathrm{ZZ}^{\top}=\mathrm{I}
Z=argZmini=1∑N∥∥∥∥∥∥zi−j∈N∑Wijzj∥∥∥∥∥∥2 s.t. ∀ii=1∑Nzi=0,N1ZZ⊤=I
优点
- 非线性,刻画的流形结构很好。
缺点
- 对于PCA等线性投影,计算出了投影矩阵 W W W之后下次就可以直接使用。但是对于LLE,来了一个新的测试样本,需要把新的测试样本和之前的样本放在一起重新跑一遍算法。
Isomap
- 每一个样本都找到最近的k个邻居,把邻居关系构建成图,只有邻居之间才有边连接。
- 每一个点与其k近邻的点之间的距离设置为欧式距离,与其他点的距离用测地距离来计算(Dijkstra算法)。【为什么可以用欧式距离:因为朋友关系是局部的,在局部可以使用欧式距离】
- 最后可以构建出 N × N N \times N N×N的测地距离矩阵 D = { d i j 2 } D = \{d_{ij}^2\} D={dij2},其中每个距离都是两个点之间的测地距离。
- 构造出一个矩阵 G = − 1 2 H D H G = -\frac{1}{2}HDH G=−21HDH,其中 G ∈ R N × N G \in R^{N \times N} G∈RN×N。【为什么G要这么算,相当于对测地距离矩阵图做度的归一化】
- 对归一化之后的矩阵 G G G做特征值分解,取最大的 k k k个特征值对应的特征向量。得到一个 N × K N \times K N×K的矩阵。
- 取每一行作为样本在低维空间的坐标。
- 也有out-of-sample的问题
主题:特征选择
- RFE嵌入法:消去分类器权重绝对值最小的那一个维度对应的特征。