机器学习经典模型:线性判别分析

最近打算重新把机器学习的经典模型重新学一遍,这次要介绍的是线性判别分析,LDA的经典应用场景是分类问题下的特征降维,比如说,医院对体检的病人,根据体检结果的各项指标,把病人的健康状况分为优、良、差三个类别,体检的各项指标就是特征,病人的健康状况就是分类的结果,基于分类结果对特征进行降维就是LDA所做的事情。

简单来说,LDA的目标是使得降维后的数据,同一类的尽可能聚集,不同类的尽可能远离,

机器学习经典模型:线性判别分析
LDA的实现过程其实就是对输入数据进行线性变换,通过线性变换对数据进行降维,这个操作类似于word2vec进行embedding的操作,也是利用单层线性变换对输入向量进行降维,区别就在于LDA的降维目标可从数学的角度进行解释,因而理论性更强。

具体来说,为了让不同类的数据尽可能远离,需要计算类的均值,

μ i = 1 N i ∑ x ∈ ω i x \mu _i = \frac{1}{N_i} \sum _{x \in \omega _i} x μi​=Ni​1​x∈ωi​∑​x

为了使同一类的数据尽可能聚集,一般我们会使用方差来衡量,但是LDA使用散列值,

S t 2 = ∑ x ∈ ω i ( x − μ i ) 2 S_t ^2 = \sum _{x \in \omega _i } (x- \mu _i)^2 St2​=x∈ωi​∑​(x−μi​)2

其实这个所谓的散列值就是计算方差的时候少除了样本数据的数据量。

假设一共只有两个类别,假设我们对输入进行了线性变换,那么可得到目标函数:

J ( w ) = ∣ w T μ 1 − w T μ 2 ∣ 2 w T S 1 2 w + w T S 2 2 w J(w) = \frac{| w^T \mu _1 - w^T \mu _2 | ^2}{w^T S_1 ^2 w + w^T S_2 ^2 w} J(w)=wTS12​w+wTS22​w∣wTμ1​−wTμ2​∣2​

优化的目标就是

a r g m a x J ( w ) = w T ( μ 1 − μ 2 ) ( μ 1 − μ 2 ) T w w T ( S 1 2 + S 2 2 ) w argmax J(w) = \frac{ w^T (\mu _1 - \mu _2) (\mu _1 - \mu _2)^T w}{w^T ( S_1 ^2 + S_2 ^2 ) w} argmaxJ(w)=wT(S12​+S22​)wwT(μ1​−μ2​)(μ1​−μ2​)Tw​

我们的目的就是求出w,使得变换之后的数据满足目标函数取极大值,具体怎么求这里就不展开了。

接下来考虑一下多类别的情况,其实主要的变化就在于让多类数据尽可能远离,定义为各个类别的数据远离所有数据的中心点,

S b = ∑ j = 1 k N j ( μ j − μ ) ( μ j − μ ) T S_b = \sum _{j=1} ^k N_j(\mu_j - \mu) (\mu_j - \mu)^T Sb​=j=1∑k​Nj​(μj​−μ)(μj​−μ)T

其中mu为所有样本的均值向量,以此作为所有数据的中心点,Nj为第j类样本的数量,引入Nj主要是引入权重。

对于方差的计算依然类似,

S w = ∑ j = 1 k S w j = ∑ j = 1 k ∑ x ∈ X j ( x − μ j ) ( x − μ j ) T S_w = \sum _{j=1} ^k S_{wj} = \sum _{j=1}^k \sum_{x \in X_j} (x - \mu_j) (x - \mu_j)^T Sw​=j=1∑k​Swj​=j=1∑k​x∈Xj​∑​(x−μj​)(x−μj​)T

最后得到多类别的优化目标:

a r g m a x J ( w ) = w T S b w w T S w w argmax J(w) = \frac{ w^T S_b w}{w^T S_w w} argmaxJ(w)=wTSw​wwTSb​w​

上一篇:主题模型


下一篇:统计学习方法第二十章作业:潜在狄利克雷分配 LDA 吉布斯抽样法算法 代码实现