基于核的线性判别分析(Kernel Linear Discriminant Analysis, K-LDA)的原理与非线性降维分类过程
题目描述
线性判别分析(LDA)是一种经典的监督降维和分类方法,其目标是找到一个投影方向,使得投影后数据的类间散度最大化,同时类内散度最小化。然而,传统LDA只能学习线性的投影方向,对于非线性可分的数据,其效果有限。
核线性判别分析(K-LDA)是LDA的核化扩展。它通过核技巧,将原始数据映射到一个高维(甚至无限维)的特征空间,然后在这个特征空间中执行标准的LDA。这样,K-LDA就能在特征空间中找到线性的判别方向,对应于原始输入空间的一个非线性判别边界,从而实现对复杂非线性模式数据的降维与分类。
接下来,我将详细讲解K-LDA的推导和计算过程。
解题过程
-
问题回顾:标准线性判别分析(LDA)
假设我们有训练样本集 { (x_i, y_i) }, i=1,...,N,其中 x_i ∈ R^d, y_i ∈ {1, 2, ..., C},C是类别数。
LDA寻找一个投影矩阵 W ∈ R^{d×p} (p <= C-1),将数据从d维投影到p维子空间,即 z_i = W^T x_i。
LDA的目标函数是最大化广义瑞利商:
J(W) = (W^T S_b W) / (W^T S_w W)
其中:- S_b 是类间散度矩阵,衡量不同类别均值向量之间的差异。
S_b = Σ_{c=1}^{C} N_c (m_c - m)(m_c - m)^T - S_w 是类内散度矩阵,衡量每个类别内部样本的分散程度。
S_w = Σ_{c=1}^{C} Σ_{i: y_i = c} (x_i - m_c)(x_i - m_c)^T - m_c 是第c类样本的均值向量,m是所有样本的全局均值向量,N_c是第c类的样本数。
求解W等价于求解广义特征值问题:S_b w = λ S_w w。取前p个最大特征值对应的特征向量构成W。
- S_b 是类间散度矩阵,衡量不同类别均值向量之间的差异。
-
核技巧引入:从原始空间到特征空间
K-LDA的核心思想是,我们不再直接处理原始数据x,而是通过一个非线性映射函数 Φ: R^d -> H,将数据映射到一个高维(可能无限维)的特征空间H中。在H中,数据变为 {Φ(x_i)}。
我们的目标变为在特征空间H中找到一个投影方向v(v ∈ H),使得投影后的数据 v^T Φ(x) 具有最佳的类间分离性。即,最大化特征空间中的广义瑞利商:
J(v) = (v^T S_b^Φ v) / (v^T S_w^Φ v)
其中 S_b^Φ 和 S_w^Φ 是特征空间中的类间和类内散度矩阵,其定义与标准LDA类似,但将x替换为Φ(x)。
直接在高维空间H中求解v是困难的,因为Φ(x)的维度可能极高,且我们通常不知道Φ的具体形式。 -
表示定理与对偶形式:将v表示为数据的线性组合
根据表示定理,在特征空间H中,LDA的最优投影方向v可以表示为所有训练样本映射的线性组合:
v = Σ_{i=1}^{N} α_i Φ(x_i) = Φ α
其中 Φ = [Φ(x_1), Φ(x_2), ..., Φ(x_N)] 是一个算子(或理解为特征空间中的矩阵),α = [α_1, α_2, ..., α_N]^T 是对偶系数向量。
这个表示是K-LDA推导的关键,它将寻找高维空间中的向量v,转化为寻找N维系数向量α。 -
核矩阵与广义特征值问题的重构
将 v = Σ_i α_i Φ(x_i) 代入特征空间中的散度矩阵公式。- 类内散度项 v^T S_w^Φ v:
可以证明,v^T S_w^Φ v = α^T M α,其中 M = Σ_{c=1}^{C} (I_c - (1/N_c) 1_{c} 1_{c}^T) K (I_c - (1/N_c) 1_{c} 1_{c}^T)^T。
这里,K是N×N的核矩阵,其元素 K_{ij} = <Φ(x_i), Φ(x_j)> = k(x_i, x_j),k(·,·)是我们选择的核函数(如高斯核、多项式核)。I_c是一个对角矩阵,其第i个对角元素为1当且仅当样本i属于类别c,否则为0。1_c是一个N维向量,如果样本i属于类别c,则其第i个元素为1,否则为0。 - 类间散度项 v^T S_b^Φ v:
可以证明,v^T S_b^Φ v = α^T N α,其中 N = Σ_{c=1}^{C} N_c (m^Φ_c - m^Φ)(m^Φ_c - m^Φ)^T,而 m^Φ_c 在特征空间中的均值向量可以通过核矩阵表示:m^Φ_c = (1/N_c) Σ_{i: y_i=c} Φ(x_i)。用核矩阵表示后,N = K B K^T,其中B是一个块对角矩阵,与类别信息相关。 - 最终的广义特征值问题:
将上述表达式代入 J(v) = (v^T S_b^Φ v) / (v^T S_w^Φ v),目标变为最大化 J(α) = (α^T N α) / (α^T M α)。
这又转化为了一个关于系数向量α的广义特征值问题:N α = λ M α。
求解这个广义特征值问题,取前p个最大特征值对应的特征向量α^(1), α^(2), ..., α^(p)。每个α^(k)是一个N维向量。
- 类内散度项 v^T S_w^Φ v:
-
归一化处理
在特征空间H中,我们要求投影方向v是单位向量,即 v^T v = 1。将 v = Σ_i α_i Φ(x_i) 代入,得到:
v^T v = Σ_i Σ_j α_i α_j <Φ(x_i), Φ(x_j)> = α^T K α = 1。
因此,在求得广义特征向量α后,我们需要对其归一化,使得 α^T K α = 1。 -
投影与分类过程
- 训练阶段:我们得到了p个归一化后的系数向量 α^(1), ..., α^(p)。同时,我们也存储了训练数据的核矩阵K(或至少存储训练数据本身,用于后续计算核函数)。
- 测试阶段:对于一个新样本x_test,我们将其投影到K-LDA找到的p维子空间中。第k个投影坐标为:
z_test^{(k)} = v^{(k)T} Φ(x_test) = (Σ_{i=1}^{N} α_i^{(k)} Φ(x_i))^T Φ(x_test) = Σ_{i=1}^{N} α_i^{(k)} k(x_i, x_test)
计算非常简单,只需要计算新样本与所有训练样本的核函数值,再与对应的系数α_i^(k)加权求和。 - 分类:将得到的p维投影向量 z_test = [z_test^(1), ..., z_test^(p)]^T 作为新特征。我们可以在这个低维空间中,使用一个简单的分类器(如最近邻分类器、线性分类器)进行分类。由于K-LDA在特征空间中是线性判别,在原始空间中对应非线性边界,因此这个低维特征通常具有良好的类别可分性。
-
算法总结与注意事项
- 输入:训练数据X,标签y,核函数k(·,·),降维维度p。
- 步骤:
- 计算训练样本间的核矩阵K。
- 根据类别标签,构造矩阵M和N。
- 求解广义特征值问题 N α = λ M α,得到前p个最大特征值对应的特征向量 α^(1), ..., α^(p)。
- 对每个α^(k)进行归一化:α^(k) <- α^(k) / sqrt(α^(k)T K α^(k))。
- 输出:归一化的系数向量 {α^(1), ..., α^(p)} 和训练数据X(用于计算测试数据的核函数)。
- 注意事项:
- 小样本问题:矩阵M通常是奇异或接近奇异的,这会导致广义特征值问题数值不稳定。一个标准的解决方案是引入正则化,将M替换为 M + μI,其中μ是一个小的正数(正则化参数),I是单位矩阵。这被称为正则化K-LDA。
- 核函数选择:高斯径向基核(RBF)是最常用的选择,因为它能将数据映射到无限维空间,且只有一个带宽参数σ需要调整。多项式核等也是常见选择。
- 计算复杂度:主要开销在于求解规模为N×N的广义特征值问题,其中N是样本数。因此,K-LDA适用于中等规模的数据集。对于大规模数据,需要采用近似或稀疏化方法。
核心思想:K-LDA通过核技巧隐式地将数据映射到高维特征空间,并在该空间中寻找线性判别方向。其求解通过表示定理转化为对偶空间(由训练样本张成)中的广义特征值问题,最终只需计算样本间的核函数,而无需知道非线性映射Φ的具体形式,从而巧妙地实现了非线性判别分析。