文章目录
线性子空间学习是机器学习和统计学中的一个重要分支,主要关注
如何在高维数据中找到一个合适的低维线性子空间
,使得数据在这个子空间中的表示能够更好地反映其内在结构,·同时降低处理的复杂度·。
线性子空间简介
线性子空间,或称为向量
子空间,在线性代数中是指一个向量空间V的一个非空子集W,它满足以下条件:
加法
封闭:对于W中的任意两个向量u和v,它们的和u + v也在W中。标量
乘封闭:对于W中的任意向量u和域K中的任意标量α,标量乘αu也在W中。含单位元
:如果V是有单位元(零向量)的,则W也必须包含这个单位元。
主要线性子空间学习方法
1. 主成分分析(PCA)
PCA是一种常用的数据降维技术
,它寻找数据方差最大
的方向作为新的坐标轴。设原始数据矩阵 X(每行为一个样本),其协方差矩阵为
C
=
1
n
−
1
X
T
X
C = \frac{1}{n-1}X^TX
C=n−11XTX,其中(n)是样本数量。PCA的目标是最小化数据投影后的方差
,从而找到正交的主成分。主要步骤和公式包括:
- 计算协方差矩阵 C。
- 求解 C 的特征值 λ i 和对应的特征向量 v i 。 求解C的特征值\lambda_i和对应的特征向量v_i。 求解C的特征值λi和对应的特征向量vi。
- 按特征值大小排序,选择前(k)个
最大
的特征值对应的特征向量作为新的坐标轴。 - 将原始数据转换到这(k)个特征向量定义的新空间中,转换公式为(Z = XV),其中(V)是前(k)个特征向量组成的矩阵。
例子
主成分分析(PCA)的具体计算过程。假设我们有一个简单的数据集,包含两个特征
x
1
和
x
2
x_1 和 x_2
x1和x2
共有4个观测样本:
编号 | x 1 x_1 x1 | x 2 x_2 x2 |
---|---|---|
1 | 2 | 3 |
2 | 3 | 1 |
3 | 4 | 2 |
4 | 1 | 4 |
首先,我们需要执行以下步骤来完成PCA的计算:
步骤 1: 数据中心化
数据去中心化,通常称为数据中心化或数据标准化
,是一种数据预处理方法,目的是消除数据集中的均值效应,使得处理后的数据围绕原点分布,即使数据集的每个特征均值为0
。这种方法在统计分析和机器学习中尤为常见,因为它可以帮助减少特征之间的偏斜
,使得模型对所有特征给予相等的重视。
数据去中心化的公式简单来说是:
x
′
=
x
−
μ
x' = x - \mu
x′=x−μ
其中:
- x x x 表示原始数据值,
- x ′ x' x′ 表示去中心化(中心化后)的数据值,
-
μ
\mu
μ 表示原始数据集的平均值。
计算平均值: - x ˉ 1 = 2 + 3 + 4 + 1 4 = 2.5 \bar{x}_1 = \frac{2+3+4+1}{4} = 2.5 xˉ1=42+3+4+1=2.5
- x ˉ 2 = 3 + 1 + 2 + 4 4 = 2.5 \bar{x}_2 = \frac{3+1+2+4}{4} = 2.5 xˉ2=43+1+2+4=2.5
数据中心化后数据:
编号 | x 1 ′ x_1' x1′ | x 2 ′ x_2' x2′ |
---|---|---|
1 | -0.5 | 0.5 |
2 | 0.5 | -1.5 |
3 | 1.5 | -0.5 |
4 | -1.5 | 1.5 |
步骤 2: 计算协方差矩阵
使用数据中心化后的数据计算协方差矩阵 (C),以衡量两个特征之间的相关性。
C
=
1
n
−
1
X
T
X
C = \frac{1}{n-1}X^TX
C=n−11XTX
C
=
[
σ
11
σ
12
σ
21
σ
22
]
C = \begin{bmatrix} \sigma_{11} & \sigma_{12} \\ \sigma_{21} & \sigma_{22} \end{bmatrix}
C=[σ11σ21σ12σ22]
其中,
- σ 11 = ( − 0.5 ) 2 + ( 0.5 ) 2 + ( 1.5 ) 2 + ( − 1.5 ) 2 4 = 1.25 \sigma_{11} = \frac{(-0.5)^2 + (0.5)^2 + (1.5)^2 + (-1.5)^2}{4} = 1.25 σ11=4(−0.5)2+(0.5)2+(1.5)2+(−1.5)2=1.25
- σ 22 = σ 11 = 1.25 \sigma_{22} = \sigma_{11} = 1.25 σ22=σ11=1.25 (因为对称)
- σ 12 = σ 21 = ( − 0.5 ) ∗ 0.5 + 0.5 ∗ ( − 1.5 ) + 1.5 ∗ ( − 0.5 ) + ( − 1.5 ) ∗ 1.5 4 = − 0.75 \sigma_{12} = \sigma_{21} = \frac{(-0.5)*0.5 + 0.5*(-1.5) + 1.5*(-0.5) + (-1.5)*1.5}{4} = -0.75 σ12=σ21=4(−0.5)∗0.5+0.5∗(−1.5)+1.5∗(−0.5)+(−1.5)∗1.5=−0.75
同等计算:
C
=
1
n
X
T
X
=
1
4
[
−
0.5
0.5
1.5
−
1.5
0.5
−
1.5
−
0.5
1.5
]
[
−
0.5
0.5
0.5
−
1.5
1.5
−
0.5
−
1.5
1.5
]
C = \frac{1}{n}X^TX = \frac{1}{4}\begin{bmatrix} -0.5& 0.5& 1.5& -1.5 \\ 0.5& -1.5& -0.5& 1.5 \end{bmatrix}\begin{bmatrix} -0.5& 0.5\\ 0.5& -1.5\\ 1.5& -0.5\\ -1.5& 1.5 \end{bmatrix}
C=n1XTX=41[−0.50.50.5−1.51.5−0.5−1.51.5]
−0.50.51.5−1.50.5−1.5−0.51.5
除以 ( n-1 ) 是使用无偏估计的方式计算样本协方差,如果是在总体数据
上计算则会除以n。
所以协方差矩阵 (C) 为:
C
=
[
1.25
−
0.75
−
0.75
1.25
]
C = \begin{bmatrix} 1.25 & -0.75 \\ -0.75 & 1.25 \end{bmatrix}
C=[1.25−0.75−0.751.25]
步骤 3: 计算特征值和特征向量
接下来,我们需要计算协方差矩阵 (C) 的特征值
和对应的特征向量
。
假设计算结果为:
- 第一个特征值 λ 1 = 3 \lambda_1 = 3 λ1=3 对应特征向量 v 1 = [ 1 / 2 , 1 / 2 ] v_1 = [1/\sqrt{2}, 1/\sqrt{2}] v1=[1/2,1/2](比例系数省略)
- 第二个特征值 λ 2 = − 0.25 \lambda_2 = -0.25 λ2=−0.25 对应特征向量 v 2 = [ − 1 / 2 , 1 / 2 ] v_2 = [-1/\sqrt{2}, 1/\sqrt{2}] v2=[−1/2,1/2](比例系数省略)
步骤 4: 选择主成分
通常,我们会根据特征值的大小
来选择主成分。在本例中,
λ
1
\lambda_1
λ1 远大于
λ
2
\lambda_2
λ2,因此我们选取第一个特征向量
v
1
v_1
v1 所代表的方向作为第一主成分。
步骤 5: 数据转换
最后,我们将原始数据转换到这个新的坐标系中
。对于每个样本
x
′
=
[
x
1
′
,
x
2
′
]
T
x' = [x_1', x_2']^T
x′=[x1′,x2′]T,其在第一主成分上的投影为
x
′
T
v
1
x'^T v_1
x′Tv1。
例如,取第一个样本
x
′
=
[
−
0.5
,
0.5
]
T
x' = [-0.5, 0.5]^T
x′=[−0.5,0.5]T,其转换后的第一主成分
得分
z
1
=
x
′
T
v
1
=
(
−
0.5
∗
1
/
2
)
+
(
0.5
∗
1
/
2
)
=
0
z_1 = x'^T v_1 = (-0.5*1/\sqrt{2}) + (0.5*1/\sqrt{2}) = 0
z1=x′Tv1=(−0.5∗1/2)+(0.5∗1/2)=0。
通过上述步骤,就完成了PCA的基本计算过程,得到了数据在第一主成分上的投影
。实践中,如果需要降低维度
,通常只保留那些具有较大特征值对应的主成分,并据此转换数据。
2. 线性判别分析(LDA)
LDA是一种监督
学习的降维方法,旨在找到最大化类间距离并最小化类内距离
的投影方向。
假设数据分为(C)个类别,每个类别的样本中心
为
μ
c
\mu_c
μc,总体样本中心
为
μ
\mu
μ,类内散度矩阵
S
W
S_W
SW和类间散度矩阵
S
B
S_B
SB的定义如下:
-
类内散度矩阵: S W = ∑ i = 1 c ∑ x j ∈ C i ( x j − μ i ) ( x j − μ i ) T S_W = \sum_{i=1}^{c} \sum_{x_j \in C_i} (x_j - \mu_i)(x_j - \mu_i)^T SW=∑i=1c∑xj∈Ci(xj−μi)(xj−μi)T。
其中,
( c ) 表示类别总数。
C i C_i Ci 表示第 ( i ) 个类别。
x j x_j xj 表示第 ( j ) 个样本点,该样本属于类别 C i C_i Ci。
μ i \mu_i μi 是第 ( i ) 个类别的样本均值向量。
( x j − μ i ) (x_j - \mu_i) (xj−μi) 是第 ( j ) 个样本减去其类别均值后的向量。
( x j − μ i ) ( x j − μ i ) T (x_j - \mu_i)(x_j - \mu_i)^T (xj−μi)(xj−μi)T 是上述向量与其转置的外积,结果是一个对称矩阵
,反映了该样本点相对于类别中心的偏差方向和幅度。
对所有类别重复这一过程并将结果相加,即得到总的类内散度矩阵
S W S_W SW。
类内散度矩阵体现了各个类别的数据在各自类内的分布情况
,LDA通过最大化类间散度
同时最小化类内散度
来寻找最佳分类边界。 -
类间散度矩阵: S B = ∑ c = 1 C ( μ c − μ ) ( μ c − μ ) T S_B = \sum_{c=1}^{C} (\mu_c - \mu)(\mu_c - \mu)^T SB=∑c=1C(μc−μ)(μc−μ)T。
LDA的目标是找到投影矩阵(W),最大化类间散度与类内散度的比值,即
J
(
W
)
=
W
T
S
B
W
W
T
S
W
W
J(W) = \frac{W^TS_BW}{W^TS_WW}
J(W)=WTSWWWTSBW。通常,前(k)个最大的特征向量
对应于
S
W
−
1
S
B
S_W^{-1}S_B
SW−1SB的特征值,被用作降维的基。
例子
线性判别分析(LDA)是一种用于分类问题
的有监督降维技术
,其目的是找到能够最大化类别间差异
同时最小化类别内差异
的投影方向。下面,将以一个简化示例来说明LDA的计算过程。
假设我们有两类二维数据,用于区分苹果和橙子,每类各有两个样本:
样本编号 | 类别 | x 1 x_1 x1 | x 2 x_2 x2 |
---|---|---|---|
1 | A (苹果) | 2 | 3 |
2 | A (苹果) | 3 | 2 |
3 | B (橙子) | 1 | 4 |
4 | B (橙子) | 4 | 1 |
步骤 1: 计算类内散度矩阵(Within-Class Scatter Matrix, S W S_W SW)
首先,计算总体和每种类别的均值向量(Mean Vector):
- 总体均值向量 μ = ( ∑ i = 1 n x i 1 N , ∑ i = 1 n x i 2 N ) = ( 2 + 3 + 1 + 4 4 = 10 4 = 2.5 , 3 + 2 + 4 + 1 4 = 10 4 = 2.5 ) = ( 2.5 , 2.5 ) \mu = \left( \frac{\sum_{i=1}^{n} x_{i1}}{N}, \frac{\sum_{i=1}^{n} x_{i2}}{N} \right) =\left ( \frac{2+3+1+4}{4} = \frac{10}{4} = 2.5,\frac{3+2+4+1}{4} = \frac{10}{4} = 2.5\right ) = \left ( 2.5,2.5\right ) μ=(N∑i=1nxi1,N∑i=1nxi2)=(42+3+1+4=410=2.5,43+2+4+1=410=2.5)=(2.5,2.5)
- 类别A的均值向量 μ A = ( 2 + 3 , 3 + 2 ) 2 = ( 2.5 , 2.5 ) \mu_A = \frac{(2+3, 3+2)}{2} = (2.5, 2.5) μA=2(2+3,3+2)=(2.5,2.5)
- 类别B的均值向量 μ B = ( 1 + 4 , 4 + 1 ) 2 = ( 2.5 , 2.5 ) \mu_B = \frac{(1+4, 4+1)}{2} = (2.5, 2.5) μB=2(1+4,4+1)=(2.5,2.5)
然后,计算类内散度矩阵
S
W
S_W
SW。由于每类只有两个样本,类内散度矩阵
简化为各个样本
与其类均值向量差
的外积之和:
S W = S A + S B S_W = S_A + S_B SW=SA+SB
类别A的贡献
其中,
- 样本1与均值的差: ( − 0.5 , 0.5 ) (-0.5, 0.5) (−0.5,0.5)
- 样本2与均值的差: ( 0.5 , − 0.5 ) (0.5, -0.5) (0.5,−0.5)
简化计算后得第A类 类内散度矩阵
:
(
−
0.5
,
0.5
)
⋅
(
−
0.5
,
0.5
)
T
+
(
0.5
,
−
0.5
)
⋅
(
0.5
,
−
0.5
)
T
=
(
0.25
−
0.25
−
0.25
0.25
)
+
(
0.25
−
0.25
−
0.25
0.25
)
=
2
×
(
0.25
−
0.25
−
0.25
0.25
)
=
(
0.5
−
0.5
−
0.5
0.5
)
(-0.5, 0.5) \cdot (-0.5, 0.5)^T + (0.5, -0.5) \cdot (0.5, -0.5)^T \\ = \begin{pmatrix} 0.25 & -0.25 \\ -0.25 & 0.25 \end{pmatrix} + \begin{pmatrix} 0.25 & -0.25 \\ -0.25 & 0.25 \end{pmatrix} \\ = 2 \times \begin{pmatrix} 0.25 & -0.25 \\ -0.25 & 0.25 \end{pmatrix} = \begin{pmatrix} 0.5 & -0.5 \\ -0.5 & 0.5 \end{pmatrix}
(−0.5,0.5)⋅(−0.5,0.5)T+(0.5,−0.5)⋅(0.5,−0.5)T=(0.25−0.25−0.250.25)+(0.25−0.25−0.250.25)=2×(0.25−0.25−0.250.25)=(0.5−0.5−0.50.5)
类别B的贡献
其中,
- 样本3与均值的差: ( − 1.5 , 2.5 ) (-1.5, 2.5) (−1.5,2.5)
- 样本4与均值的差:
(
1.5
,
−
2.5
)
(1.5, -2.5)
(1.5,−2.5)
简化计算后得第B类 类内散度矩阵
:
( − 1.5 , 2.5 ) ⋅ ( − 1.5 , 2.5 ) T + ( 1.5 , − 2.5 ) ⋅ ( 1.5 , − 2.5 ) T = ( 2.25 − 3.75 − 3.75 6.25 ) + ( 2.25 3.75 3.75 6.25 ) = 2 × ( 2.25 0 0 6.25 ) = ( 4.5 0 0 12.5 ) (-1.5, 2.5) \cdot (-1.5, 2.5)^T + (1.5, -2.5) \cdot (1.5, -2.5)^T \\ = \begin{pmatrix} 2.25 & -3.75 \\ -3.75 & 6.25 \end{pmatrix} + \begin{pmatrix} 2.25 & 3.75 \\ 3.75 & 6.25 \end{pmatrix} \\ = 2 \times \begin{pmatrix} 2.25 & 0 \\ 0 & 6.25 \end{pmatrix} = \begin{pmatrix} 4.5 & 0 \\ 0 & 12.5 \end{pmatrix} (−1.5,2.5)⋅(−1.5,2.5)T+(1.5,−2.5)⋅(1.5,−2.5)T=(2.25−3.75−3.756.25)+(2.253.753.756.25)=2×(2.25006.25)=(4.50012.5)
合并类内散度矩阵:
S
W
=
S
A
+
S
B
=
(
0.5
−
0.5
−
0.5
0.5
)
+
(
4.5
0
0
12.5
)
=
(
5
−
0.5
−
0.5
13
)
S_W = S_A + S_B = \begin{pmatrix} 0.5 & -0.5 \\ -0.5 & 0.5 \end{pmatrix}+\begin{pmatrix} 4.5 & 0 \\ 0 & 12.5 \end{pmatrix} = \begin{pmatrix} 5& -0.5 \\ -0.5 & 13 \end{pmatrix}
SW=SA+SB=(0.5−0.5−0.50.5)+(4.50012.5)=(5−0.5−0.513)
步骤 2: 计算类间散度矩阵(Between-Class Scatter Matrix, S B S_B SB)
类间散度矩阵基于各类别均值向量的差异:
S B = ∑ c = 1 C ( μ c − μ ) ( μ c − μ ) T S_B = \sum_{c=1}^{C} (\mu_c - \mu)(\mu_c - \mu)^T SB=c=1∑C(μc−μ)(μc−μ)T
其中,(N) 是总样本数(此处为4),
μ
T
\mu_T
μT 是所有样本的总均值(此处也是 (2.5, 2.5))。但由于两类别均值相同,
μ
A
=
μ
B
=
μ
T
\mu_A = \mu_B = \mu_T
μA=μB=μT,故
S
B
S_B
SB 为零矩阵,这意味着在这个特定的简化例子中,LDA无法找到有效的投影方向,因为两类别的数据完全重叠,没有类间差异。
在实际情况中,如果类别的均值不同,会计算出非零的
S
B
S_B
SB,然后求解
S
W
−
1
S
B
S_W^{-1}S_B
SW−1SB 的特征值和特征向量
,选择最大的特征值
对应的特征向量
作为分类的最优方向。
注意
这个例子极端简化,实际上LDA在处理类别分布有显著差异的数据时能发挥很好的效果。在实际应用中,数据点通常不会如此巧合地导致类别均值相等,从而能够有效地计算
S
B
S_B
SB 并找到分类超平面
。