降维
线性判别分析 LDA
LDA是什么?
LDA是有监督学习中的降维方法,是线性分类器和高斯模型的结合。
在低维度上进行投影,投影后希望每一种类别数据的投影点尽可能的接近,而不同类别的数据的类别中心之间的距离尽可能的大。
如下图所示,这些数据特征是二维的,我们希望将这些数据投影到一维的一条直线,让每一种类别数据的投影点尽可能的接近,而红色和蓝色数据中心之间的距离尽可能的大。
Two-class LDA (见PPT)
(1)
线性分类器
y
k
=
w
k
T
x
+
w
0
y_k=w_k^Tx+w_0
yk=wkTx+w0
LDA的投影函数
y
=
w
T
x
y=w^Tx
y=wTx
目标:求能使优化函数最大化的参数
w
w
w
思想:类内小,类间大
(4)
类内散度矩阵
S
W
S_W
SW
类间散度矩阵
S
B
S_B
SB
(5)
化为求特征向量问题
本页的
J
=
J
(
w
)
J=J(w)
J=J(w),是一个数
dividing
w
T
S
w
w
w^TS_ww
wTSww即归一化
拉格朗日乘子法l
【草稿】数据集 D = { ( x 1 , y 1 ) , . . . , ( x N , y N ) } , D j D=\{(x_1, y_1),...,(x_N,y_N)\}, D_j D={(x1,y1),...,(xN,yN)},Dj 为属于第 j j j类的样本集合。
第 j j j类样本的均值 $ \mu_j=\frac{1}{N_j}\sum\limits_{x\in D_j} x$
第 j j j类样本的协方差 ∑ j = ∑ x ∈ D j ( x − μ j ) ( x − μ j ) T \sum_j=\sum\limits_{x\in D_j}(x-\mu_j)(x-\mu_j)^T ∑j=x∈Dj∑(x−μj)(x−μj)T
优缺点
LDA算法既可以用来降维,又可以用来分类,主要还是用于降维。在我们进行图像识别相关的数据分析时,LDA是一个有力的工具。
主要优点有:
- 在降维过程中可以使用类别的先验知识经验,而像PCA这样的无监督学习则无法使用类别先验知识。
- LDA在样本分类信息依赖均值而不是方差的时候,比PCA之类的算法较优。
主要缺点有:
- 不适合对非高斯分布样本进行降维,PCA也有这个问题。
- 降维最多降到类别数k-1的维数,如果我们降维的维度大于k-1,则不能使用LDA。当然目前有一些LDA的进化版算法可以绕过这个问题。
- 在样本分类信息依赖方差而不是均值的时候,降维效果不好。
- 可能过拟合
主成分分析 PCA
PCA无监督学习中的降维方法
目标:二维降为一维,
v
1
v_1
v1方向较好,两个评判标准:
- 样本到这条直线距离较近;
- 样本点在这条直线投影较散
基于投影距离的PCA
Linear Discriminant Analysis, LDA | Principal Components Analysis, PCA |
---|---|
有监督降维,样本有类标 | 无监督降维,样本无类标 |
最多降维到k-1 | 无限制 |
投影后类内方差最小,类间方差最大(即投影方向为分类性能最好的方向)。 | 最大化投影后的方差/最小化投影后的损失 |
既可降维,也可分类。其学习得的判别函数,可预测新样本 | 对原数据降维,作为预处理 |
支持向量机 SVM
核方法 Kernel Methods
说一说核方法(一)——核方法与核函数简介
问题:低维空间数据线性不可分
办法:找到一个映射,将低维空间数据映射到高维,使数据线性可分;
新的问题:这个映射本质是内积,高维空间中求内积非常复杂
新的办法:核方法,满足映射到高维的要求,同时用低维空间内积表示高维内积。
与SVM的关系:核方法是个独立于SVM的方法,只不过常用于SVM,但也可以用于logistic回归,最小二乘法,降维等等。
那么这个映射是什么呢?它其实描述的是一个跟内积有关的东西。有点像是在说:如果我有一个维度很高的内积空间,那么我能找到一个映射 Φ : X → H , Φ ( x ) = K ( x , ⋅ ) \Phi : X \to \mathcal{H}, \Phi(x) = K(x, \cdot) Φ:X→H,Φ(x)=K(x,⋅) (其中 H \mathcal{H} H 是某个 RKHS 空间),它可以把这个空间中的点 x x x 映射成为一个函数(请想象这个 RKHS 空间是由函数们组成的空间,里面的每一个点,或者说每一个元素,都是一个函数),这样,在计算高维内积时就有 < Φ ( x ) , Φ ( y ) > H = K ( x , y ) <\Phi(x), \Phi(y)>_{\mathcal{H}} = K(x, y) <Φ(x),Φ(y)>H=K(x,y) ,就转变成了计算核函数的值了。
一般的欧式空间中,我们可以定义一个
n
×
n
n \times n
n×n 矩阵的特征值和特征向量。
A
x
=
λ
x
Ax=\lambda x
Ax=λx
考虑一个矩阵的列空间,当这个矩阵可以进行特征值分解的时候,其特征向量就构成了这个
n
n
n 维空间的一组基底。
现在我们把这个概念推广到函数空间。
我们把每个函数 f ( x ) f(x) f(x) 看作一个无穷维的向量,然后定义一个函数空间中无穷维的矩阵 K ( x , y ) K(x, y) K(x,y) ,如果它满足:
正定性:
∀
f
→
∬
f
(
x
)
K
(
x
,
y
)
f
(
y
)
 
d
x
 
d
y
≥
0
\forall f \rightarrow \iint f(x)K(x, y)f(y) \,\mathrm{d}x\,\mathrm{d}y \ge 0
∀f→∬f(x)K(x,y)f(y)dxdy≥0 。
对称性:
K
(
x
,
y
)
=
K
(
y
,
x
)
K(x, y) = K(y, x)
K(x,y)=K(y,x) 。
我们就把它称作核函数(kernel function)。
和特征值与特征向量的概念相似,存在特征值
λ
\lambda
λ 和特征函数
ψ
(
x
)
\psi(x)
ψ(x) 。满足:
∫
K
(
x
,
y
)
ψ
(
x
)
d
x
=
λ
ψ
(
y
)
\int K(x, y)\psi(x) \mathrm{d}x = \lambda \psi (y)
∫K(x,y)ψ(x)dx=λψ(y)
对于不同的特征值
λ
1
\lambda_{1}
λ1 、
λ
2
\lambda_{2}
λ2 ,对应不同的特征函数
ψ
1
(
x
)
\psi_{1}(x)
ψ1(x) 、
ψ
2
(
x
)
\psi_{2}(x)
ψ2(x) ,很容易得到:
∫
λ
1
ψ
1
(
x
)
ψ
2
(
x
)
d
x
=
∬
K
(
y
,
x
)
ψ
1
(
y
)
d
y
 
ψ
2
(
x
)
d
x
=
∬
K
(
y
,
x
)
ψ
2
(
x
)
d
x
 
ψ
1
(
y
)
d
y
=
∫
λ
2
ψ
2
(
y
)
ψ
1
(
y
)
d
y
=
∫
λ
2
ψ
2
(
x
)
ψ
1
(
x
)
d
x
\begin{aligned} \int \lambda_1 \psi_{1}(x) \psi_{2}(x) \mathrm{d}x &= \iint K(y, x) \psi_{1}(y) \mathrm{d}y\,\psi_{2}(x)\mathrm{d}x \\ &= \iint K(y, x) \psi_{2}(x) \mathrm{d}x\,\psi_{1}(y)\mathrm{d}y \\ &= \int \lambda_2 \psi_{2}(y) \psi_{1}(y) \mathrm{d}y \\ &= \int \lambda_2 \psi_{2}(x) \psi_{1}(x) \mathrm{d}x \end{aligned}
∫λ1ψ1(x)ψ2(x)dx=∬K(y,x)ψ1(y)dyψ2(x)dx=∬K(y,x)ψ2(x)dxψ1(y)dy=∫λ2ψ2(y)ψ1(y)dy=∫λ2ψ2(x)ψ1(x)dx
因此,
⟨
ψ
1
,
ψ
2
⟩
=
∫
ψ
1
(
x
)
ψ
2
(
x
)
d
x
=
0
\langle \psi_{1}, \psi_{2} \rangle = \int \psi_{1}(x) \psi_{2}(x) \mathrm{d}x = 0
⟨ψ1,ψ2⟩=∫ψ1(x)ψ2(x)dx=0
所以我们找到了一个可以生成这个空间的矩阵
K
K
K,一组无穷多个特征值
{
λ
i
}
i
=
1
∞
\lbrace \lambda_{i} \rbrace_{i=1}^{\infty}
{λi}i=1∞ ,和一组无穷多个元素的正交基
{
ψ
i
}
i
=
1
∞
\lbrace \psi_{i} \rbrace_{i=1}^{\infty}
{ψi}i=1∞ 。
再生核希尔伯特空间
如果我们把
{
λ
i
ψ
i
}
i
=
1
∞
\lbrace \sqrt{\lambda_{i}}\psi_{i} \rbrace_{i=1}^{\infty}
{λiψi}i=1∞ 当成一组正交基来生成一个希尔伯特空间
H
\mathcal{H}
H 。则该空间中的所有函数都能表示为这组正交基的线性组合。
f
=
∑
i
=
1
∞
f
i
λ
i
ψ
i
f = \sum_{i=1}^{\infty} f_{i}\sqrt{\lambda_{i}}\psi_{i}
f=i=1∑∞fiλiψi
于是我们就可以把函数
f
f
f ,看作
H
\mathcal{H}
H 中的一个向量
f
=
(
f
1
,
f
2
,
⋯
 
)
H
T
f = (f_{1}, f_{2}, \cdots)_{\mathcal{H}}^{\mathsf{T}}
f=(f1,f2,⋯)HT 。
对于另外一个函数
g
=
(
g
1
,
g
2
,
⋯
 
)
H
T
g = (g_{1}, g_{2}, \cdots)_{\mathcal{H}}^{\mathsf{T}}
g=(g1,g2,⋯)HT ,我们有:
⟨
f
,
g
⟩
H
=
∑
i
=
1
∞
f
i
g
i
\langle f, g \rangle_{\mathcal{H}} = \sum_{i=1}^{\infty}f_{i}g_{i}
⟨f,g⟩H=i=1∑∞figi
有了这个内积,我们就可以把核函数看成一种内积形式了,即:
K
(
x
,
⋅
)
=
∑
i
=
0
∞
λ
i
ψ
i
(
x
)
ψ
i
(
⋅
)
K(x, \cdot) = \sum_{i=0}^{\infty} \lambda_{i}\psi_{i}(x)\psi_{i}(\cdot)
K(x,⋅)=i=0∑∞λiψi(x)ψi(⋅)
如果把
ψ
i
\psi_{i}
ψi 当成一个算子来看的话,我们就取函数名的一个形式:
K
(
x
,
⋅
)
=
∑
i
=
0
∞
λ
i
ψ
i
(
x
)
ψ
i
K(x, \cdot) = \sum_{i=0}^{\infty} \lambda_{i}\psi_{i}(x)\psi_{i}
K(x,⋅)=∑i=0∞λiψi(x)ψi 。
所以我们就可以把
K
K
K 当作一个向量来看了。
K
(
x
,
⋅
)
=
(
λ
1
ψ
1
(
x
)
,
λ
2
ψ
2
(
x
)
,
⋯
 
)
H
T
K(x, \cdot) = (\sqrt{\lambda_{1}}\psi_{1}(x), \sqrt{\lambda_{2}}\psi_{2}(x),\cdots)_{\mathcal{H}}^{\mathsf{T}}
K(x,⋅)=(λ1ψ1(x),λ2ψ2(x),⋯)HT
因此,
⟨
K
(
x
,
⋅
)
,
K
(
y
,
⋅
)
⟩
H
=
∑
i
=
0
∞
λ
i
ψ
i
(
x
)
ψ
i
(
y
)
=
K
(
x
,
y
)
\langle K(x, \cdot), K(y, \cdot) \rangle_{\mathcal{H}} = \sum_{i=0}^{\infty} \lambda_{i} \psi_{i}(x) \psi_{i}(y) = K(x, y)
⟨K(x,⋅),K(y,⋅)⟩H=i=0∑∞λiψi(x)ψi(y)=K(x,y)
这个性质就叫再生性(reproducing),这个
H
\mathcal{H}
H 就叫做再生核希尔伯特空间(reproducing kernel Hilbert space,RKHS)。
回到我们最初的问题,怎么把一个点映射到一个特征空间上呢?
定义一个映射:
Φ
(
x
)
=
K
(
x
,
⋅
)
=
(
λ
1
ψ
1
(
x
)
,
λ
2
ψ
2
(
x
)
,
⋯
 
)
H
T
\Phi(x) = K(x, \cdot) = (\sqrt{\lambda_{1}}\psi_{1}(x), \sqrt{\lambda_{2}}\psi_{2}(x),\cdots)_{\mathcal{H}}^{\mathsf{T}}
Φ(x)=K(x,⋅)=(λ1ψ1(x),λ2ψ2(x),⋯)HT
则
⟨
Φ
(
x
)
,
Φ
(
y
)
⟩
H
=
⟨
K
(
x
,
⋅
)
,
K
(
y
,
⋅
)
⟩
H
=
K
(
x
,
y
)
\langle \Phi(x), \Phi(y) \rangle_{\mathcal{H}} = \langle K(x, \cdot), K(y, \cdot) \rangle_{\mathcal{H}} = K(x, y)
⟨Φ(x),Φ(y)⟩H=⟨K(x,⋅),K(y,⋅)⟩H=K(x,y)
虽然我们不知道这个映射的具体形式是什么,但是我们可以知道对于一个对称的正定函数(矩阵)
K
K
K ,一定存在一个映射
Φ
\Phi
Φ 和一个特征空间
H
\mathcal{H}
H ,使得
⟨
Φ
(
x
)
,
Φ
(
y
)
⟩
H
=
K
(
x
,
y
)
\langle \Phi(x), \Phi(y) \rangle_{\mathcal{H}} = K(x, y)
⟨Φ(x),Φ(y)⟩H=K(x,y)
这就叫做核方法(kernel trick)。
所以为什么一个核函数都对应一个正定矩阵呢,就是因为它把核函数看成张成某个 RKHS 的空间的一组基底的线性组合。
在 SVM 中的应用
简单说几句,公式太难写了(笑)。
我们在使用原始数据 x x x 的时候发现数据并不可分,所以就寄希望于一个映射 Φ ( x ) \Phi(x) Φ(x) ,这个映射把低维空间上的数据映射到高维空间,这样数据集就有可能变得可分了。
但是在考虑优化问题的对偶问题时,需要计算
⟨
x
i
,
x
j
⟩
\langle x_{i}, x_{j} \rangle
⟨xi,xj⟩ ,请注意到,我们已经把所有的
x
x
x 换成了
Φ
(
x
)
\Phi(x)
Φ(x) ,所以就变成需要计算
⟨
Φ
(
x
i
)
,
Φ
(
x
j
)
⟩
\langle \Phi(x_{i}), \Phi(x_{j}) \rangle
⟨Φ(xi),Φ(xj)⟩ 。
为了不让计算变得很困难,我们就可以找到一个核函数
K
K
K ,满足
K
K
K 可以生成
Φ
\Phi
Φ 所形成的高维空间,这样
⟨
Φ
(
x
i
)
,
Φ
(
x
j
)
⟩
\langle \Phi(x_{i}), \Phi(x_{j}) \rangle
⟨Φ(xi),Φ(xj)⟩ 就可以简单的用
K
(
x
i
,
x
j
)
K(x_{i}, x_{j})
K(xi,xj) 代替了。而
K
K
K 往往定义成和
x
x
x 的内积有关的式子,这样在低维空间中计算内积就很简单。
如:径向基函数里有 ∥ x − y ∥ 2 \lVert x - y \rVert^{2} ∥x−y∥2 ,展开以后其实就含有两个范数项(注意范数就是内积)和一个内积项。