机器学习中的数学-线性判别分析(LDA)
前言
在之前的一篇博客机器学习中的数学(7)——PCA的数学原理中深入讲解了,PCA的数学原理。谈到PCA就不得不谈LDA,他们就像是一对孪生兄弟,总是被人们放在一起学习,比较。这这篇博客中我们就来谈谈LDA模型。由于水平有限,积累还不够,有不足之处还望指点。下面就进入正题吧。
为什么要用LDA
前面的博客提到PCA是常用的有效的数据降维的方法,与之相同的是LDA也是一种将数据降维的方法。PCA已经是一种表现很好的数据降维的方法,那为什么还要有LDA呢?下面我们就来回答这个问题?
PCA是一种无监督的数据降维方法,与之不同的是LDA是一种有监督的数据降维方法。我们知道即使在训练样本上,我们提供了类别标签,在使用PCA模型的时候,我们是不利用类别标签的,而LDA在进行数据降维的时候是利用数据的类别标签提供的信息的。
从几何的角度来看,PCA和LDA都是讲数据投影到新的相互正交的坐标轴上。只不过在投影的过程中他们使用的约束是不同的,也可以说目标是不同的。PCA是将数据投影到方差最大的几个相互正交的方向上,以期待保留最多的样本信息。样本的方差越大表示样本的多样性越好,在训练模型的时候,我们当然希望数据的差别越大越好。否则即使样本很多但是他们彼此相似或者相同,提供的样本信息将相同,相当于只有很少的样本提供信息是有用的。样本信息不足将导致模型性能不够理想。这就是PCA降维的目标:将数据投影到方差最大的几个相互正交的方向上。这种约束有时候很有用,比如在下面这个例子:
对于这个样本集我们可以将数据投影到x轴或者y轴,但这都不是最佳的投影方向,因为这两个方向都不能最好地反映数据的分布。很明显还存在最佳的方向可以描述数据的分布趋势,那就是图中红色直线所在的方向。也是数据样本做投影,方差最大的方向。向这个方向做投影,投影后数据的方差最大,数据保留的信息最多。
但是,对于另外的一些不同分布的数据集,PCA的这个投影后方差最大的目标就不太合适了。比如对于下面图片中的数据集:
针对这个数据集,如果同样选择使用PCA,选择方差最大的方向作为投影方向,来对数据进行降维。那么PCA选出的最佳投影方向,将是图中红色直线所示的方向。这样做投影确实方差最大,但是是不是有其他问题。聪明的你一定发现了,这样做投影之后两类数据样本将混合在一起,将不再线性可分,甚至是不可分的。这对我们来说简直就是地狱,本来线性可分的样本被我们亲手变得不再可分。
帅气英俊的你也一定发现了,图中还有一条耀眼的黄色直线,向这条直线做投影即能使数据降维,同时还能保证两类数据仍然是线性可分的。上面的这个数据集如果使用LDA降维,找出的投影方向就是黄色直线所在的方向。
这其实就是LDA的思想,或者说LDA降维的目标:将带有标签的数据降维,投影到低维空间同时满足三个条件:
尽可能多地保留数据样本的信息(即选择最大的特征是对应的特征向量所代表的的方向)。
寻找使样本尽可能好分的最佳投影方向。
投影后使得同类样本尽可能近,不同类样本尽可能远。
其实第二个和第三个条件是基本等价的,我们很容易想到,使样本尽可能好分的投影方向,就是要使投影后使得同类样本尽可能近,不同类样本尽可能远。
上面大致讲解的LDA的基本思想,以及与PCA的不同,下面就来介绍一下LDA模型。
LDA模型
LDA模型实现基本思想是和PCA相同的,都是向低维空间做投影,所以对于向量投影的基本的知识,这里就不再进行讲解了,不懂得同学可以参看文章开头提到的那篇PCA的博客。
符号
x : 表示训练样本,使用列向量表示
xjixij:表示第i类中的第j个样本
C:表示有C类样本
μiμi:表示第i类训练样本的均值 (i=1,2,…,C)
MiMi:表示第i类训练样本的数目
MM:表示训练样本的总数目 M=∑Ci=0MiM=∑i=0CMi
μμ:是所有样本的均值向量 μ=1M∑Mi=1xi=1C∑Ci=1μiμ=1M∑i=1Mxi=1C∑i=1Cμi
DiDi:表示第i类样本集合
SwSw:表示类内散度矩阵,w是within的简写
SbSb:表示类间散度矩阵,b是between的简写
优化目标
为什么是线性判别分析呢?所谓的线性就是,我们要将数据点投影到直线上(可能是多条直线),直线的函数解析式又称为线性函数。通常直线的表达式为
y=wTx
y=wTx
其实这里的x就是样本向量(列向量),如果投影到一条直线上w就是一个特征向量(列向量形式)或者多个特征向量构成的矩阵。至于w为什么是特征向量,后面我们就能推导出来。y为投影后的样本点(列向量)。
我们首先使用两类样本来说明,然后再推广至多类问题。
将数据投影到直线w上,则两类样本的中心在直线上的投影分别为wTμ0wTμ0和wTμ1wTμ1,若将所有的样本点都都投影到直线上,则两类样本的协方差分别为wT∑0wwT∑0w和wT∑1wwT∑1w.
投影后同类样本协方差矩阵的求法:
∑x∈Di(wTx−wTui)2=∑x∈Di(wT(x−ui))2=∑x∈DiwT(x−μi)(x−ui)Tw=wT∑x∈Di[(x−μi)(x−ui)T]w
∑x∈Di(wTx−wTui)2=∑x∈Di(wT(x−ui))2=∑x∈DiwT(x−μi)(x−ui)Tw=wT∑x∈Di[(x−μi)(x−ui)T]w
上式的中间部分∑x∈Di(x−μi)(x−ui)T∑x∈Di(x−μi)(x−ui)T便是同类样本投影前的协方差矩阵。由还可以看出同类样本投影前后协方差矩阵之间的关系。如果投影前的协方差矩阵为ΣΣ 则投影后的为 wTΣwwTΣw.
上式的推导需要用到如下公式:a,ba,b 都是列向量,(a⋅b)2=(aTb)2=(aTb)(aTb)=(aTb)(aTb)T=aTbbTa(a⋅b)2=(aTb)2=(aTb)(aTb)=(aTb)(aTb)T=aTbbTa .
欲使同类样例的投影点尽可能接近,可以让同类样本点的协方差矩阵尽可能小,即wT∑0w+wT∑1wwT∑0w+wT∑1w 尽可能小; 而欲使异类样例的投影点尽可能远离,可以让类中心之间的距离尽可能大,即||wTμ0−wTμ1||22||wTμ0−wTμ1||22 尽可能大。同时考虑二者,则可得到欲最大化的目标
J=||wTμ0−wTμ1||22wT(∑0+∑1)w=wT(μ0−μ1)(μ0−μ1)TwwT(∑0+∑1)w
J=||wTμ0−wTμ1||22wT(∑0+∑1)w=wT(μ0−μ1)(μ0−μ1)TwwT(∑0+∑1)w
上式中的||⋅||||⋅||表示欧几里得范数,||x−μi||2=(x−μi)T(x−μi)||x−μi||2=(x−μi)T(x−μi)
协方差与样本分布的关系
上面的这段话来自于周志华老师的机器学习书籍,不知道大家对上面的这段话是否存在疑问? 我在阅读 的时候是存在疑问的,即为什么同类样本点的协方差矩阵尽可能小,同类样例的投影点就尽可能接近。我想大概是这样的:我们在最初接触协方差是用来表示两个变量的相关性,我们来看一下协方差和方差的公式:
cov=1n∑(X−X¯)(Y−Y¯)
cov=1n∑(X−X¯)(Y−Y¯)
cov=1n∑(X−X¯)(X−X¯)
cov=1n∑(X−X¯)(X−X¯)
可以看到协方差的公式和方差十分相近,甚至可以说方差是协方差的一种特例。我们知道方差可以用来度量数据的离散程度,(X−X¯)(X−X¯)越大,表示数据距离样本中心越远,数据越离散,数据的方差越大。同样我们观察,协方差的公式,(X−X¯)(X−X¯)和(Y−Y¯)(Y−Y¯)越大,表示数据距离样本中心越远,数据分布越分散,协方差越大。相反他们越小表示数据距离样本中心越近,数据分布越集中,协方差越小。
所以协方差不仅是反映了变量之间的相关性,同样反映了多维样本分布的离散程度(一维样本使用方差),协方差越大(对于负相关来说是绝对值越大),表示数据的分布越分散。所以上面的“欲使同类样例的投影点尽可能接近,可以让同类样本点的协方差矩阵尽可能小”就可以理解了。
类间散度矩阵
类间散度矩阵其实就是协方差矩阵乘以样本数目,即散度矩阵与协方差矩阵只是相差一个系数。对于协方差矩阵和散度矩阵有疑问的同学可以参考博文:机器学习中的数学(3)——协方差矩阵和散布(散度)矩阵
对于两类样本而言:
Sb=(μ0−μ1)(μ0−μ1)T
Sb=(μ0−μ1)(μ0−μ1)T
对于多类问题,类间散度矩阵公式:
Sb=∑i=1C(μi−μ)(μi−μ)T
Sb=∑i=1C(μi−μ)(μi−μ)T
表示各个类样本均值的协方差矩阵。
如果我们只使用这样一个类间散度矩阵这样一个约束条件来对数据进行降维:即使得类间的样本投影后尽可能远离。那么参考PCA的降维过程:
Sbu=λu
Sbu=λu
不同的是,为了保证类间的样本投影后尽可能远离,我们应该选择特征值最大的特征向量代表的方向做投影。这样才能保证,不同类样本投影之后方差尽可能地大,尽可能能地远离。
类内散度矩阵
对于两类问题而言:
Sw=Σ0+Σ1=∑x∈D0(x−μ0)(x−u0)T+∑x∈D1(x−μ1)(x−u1)T
Sw=Σ0+Σ1=∑x∈D0(x−μ0)(x−u0)T+∑x∈D1(x−μ1)(x−u1)T
对于多类问题类内散度矩阵公式:
Sw=∑i=1C∑j=1Mi(xji−μi)(xji−μ1)T
Sw=∑i=1C∑j=1Mi(xij−μi)(xij−μ1)T
其中:
∑j=1Mi(xji−μi)(xji−μi)T
∑j=1Mi(xij−μi)(xij−μi)T
表示第i类样本的协方差矩阵。所以SwSw就是表示C类样本协方差矩阵之和。
如果我们只使用这样一个类内散度矩阵这样一个约束条件来对数据进行降维:即使得类内的样本投影后尽可能接近。那么参考PCA的降维过程:
Swu=λu
Swu=λu
不同的是,为了保证类内的样本投影后尽可能接近,我们应该选择特征值最小的特征向量代表的方向做投影。这样才能保证,同类样本投影之后方差尽可能地小,尽可能能地接近。
优化
定义过类内散度矩阵和类间散度矩阵后,我们可以将上述的优化目标重新写为:
J=wTSbwwTSww
J=wTSbwwTSww
这就是LDA欲最大化的目标,即SbSb与SwSw的广义瑞利商。
如何确定ww呢?注意到上式的分子和分母都是关于ww的二次项,因此上式的解与ww的长度无关,只与其方向有关.不失一般性,令wTSww=1wTSww=1,则上式等价于:
minw−wTSbw
minw−wTSbw
st.wTSww=1
st.wTSww=1
使用拉格朗日乘子法,(对于拉格朗日乘子法不太了解的同学可以参考博文:机器学习中的数学(5)——拉格朗日乘子法和KKT条件)上式等价于:
c(w)=wTSbw−λ(wTSww−1)
c(w)=wTSbw−λ(wTSww−1)
dcdw=2Sbw−2λSww=0
dcdw=2Sbw−2λSww=0
Sbw=λSww
Sbw=λSww
S−1wSbw=λw
Sw−1Sbw=λw
可以看到上式就有转化为一个求解特征值和特征向量的问题了。w就是我们要求解的特征向量,这就验证了我们之前所说的式子y=wTxy=wTx中的w就是特征向量构成的矩阵。
但是到这里我们仍然有个问题需要解决,那就是SwSw是否可逆。遗憾的是在实际的应用中,它通常是不可逆的,我们通常有连个办法解决该问题。
拓展
解决方法一:
令Sw=Sw+γISw=Sw+γI, 其中γγ是一个特别小的数,这样SwSw一定可逆。
解决方法二:
先使用PCA对数据进行降维,使得在降维后的数据上SwSw可逆,在使用LDA。
参考文献
1.机器学习-线性判别分析.周志华x
2.机器学习中的数学(4)-线性判别分析(LDA), 主成分分析(PCA)
机器学习中的数学-线性判别分析(LDA)的更多相关文章
- 机器学习中的数学-线性判别分析(LDA), 主成分分析(PCA)
转:http://www.cnblogs.com/LeftNotEasy/archive/2011/01/08/lda-and-pca-machine-learning.html 版权声明: 本文由L ...
- 机器学习 —— 基础整理(四)特征提取之线性方法:主成分分析PCA、独立成分分析ICA、线性判别分析LDA
本文简单整理了以下内容: (一)维数灾难 (二)特征提取--线性方法 1. 主成分分析PCA 2. 独立成分分析ICA 3. 线性判别分析LDA (一)维数灾难(Curse of dimensiona ...
- 机器学习理论基础学习3.2--- Linear classification 线性分类之线性判别分析(LDA)
在学习LDA之前,有必要将其自然语言处理领域的LDA区别开来,在自然语言处理领域, LDA是隐含狄利克雷分布(Latent Dirichlet Allocation,简称LDA),是一种处理文档的主题 ...
- 线性判别分析LDA详解
1 Linear Discriminant Analysis 相较于FLD(Fisher Linear Decriminant),LDA假设:1.样本数据服从正态分布,2.各类得协方差相等.虽然 ...
- SIGAI机器学习第十集 线性判别分析
讲授LDA基本思想,寻找最佳投影矩阵,PCA与LDA的比较,LDA的实际应用 前边讲的数据降维算法PCA.流行学习都是无监督学习,计算过程中没有利用样本的标签值.对于分类问题,我们要达到的目标是提取或 ...
- 运用sklearn进行线性判别分析(LDA)代码实现
基于sklearn的线性判别分析(LDA)代码实现 一.前言及回顾 本文记录使用sklearn库实现有监督的数据降维技术——线性判别分析(LDA).在上一篇LDA线性判别分析原理及python应用(葡 ...
- 机器学习中的数学(4)-线性判别分析(LDA), 主成分分析(PCA)
版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleast@gm ...
- 主成分分析(PCA)与线性判别分析(LDA)
主成分分析 线性.非监督.全局的降维算法 PCA最大方差理论 出发点:在信号处理领域,信号具有较大方差,噪声具有较小方差 目标:最大化投影方差,让数据在主投影方向上方差最大 PCA的求解方法: 对样本 ...
- 线性判别分析LDA原理总结
在主成分分析(PCA)原理总结中,我们对降维算法PCA做了总结.这里我们就对另外一种经典的降维方法线性判别分析(Linear Discriminant Analysis, 以下简称LDA)做一个总结. ...
随机推荐
- C# 异步的简单用法
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- HTML5全屏操作API
一.定义:HTML5规范允许自定义网页上的任一元素全屏显示,存在兼容问题 二.使用: ①基本: Node.RequestFullScreen()开启全屏显示 Node.CancelFullScreen ...
- yii2.0简单使用elasticsearch
1.安装扩展 /c/phpStudy/PHPTutorial/php/php-5.5.38/php /c/ProgramData/ComposerSetup/bin/composer.phar req ...
- linux 下终端通过证书、私钥快捷登录
ssh -i 你的证书 root@IP地址 -p 端口号 ssh -i {您的 .pem 文件的完整路径} ec2-user@{实例 IP 地址} 设置秘钥权限chmod 600 ~/.ssh/id_ ...
- 项目发布到tomcat后,通过项目名称访问报404
查看tomcat发布地址发现和项目名称不一致 如果直接拷贝项目,可能也需要修改此选项 解决方案: 经过排查发现了原因: 首先说明一下项目 Maven+SSM 需要使用到 maven tomcat 7 ...
- Pytest权威教程17-安装和使用插件
目录 安装和使用插件 在测试模块或conftest文件中要求/加载插件 找出哪些插件是可用的 按名称取消/取消注册插件 返回: Pytest权威教程 安装和使用插件 本节讨论如何安装和使用第三方插件. ...
- python find和index的区别
如果找不到目标元素,index会报错,find会返回-1 >>> s="hello world" >>> s.find("llo&qu ...
- OSPF外部实验详解
- hook cookie
// ==UserScript== // @name cookie // @namespace http://tampermonkey.net/ // @version 0.1 // @descrip ...
- redis rehash
rehash 随着操作的不断执行, 哈希表保存的键值对会逐渐地增多或者减少, 为了让哈希表的负载因子(load factor)维持在一个合理的范围之内, 当哈希表保存的键值对数量太多或者太少时, 程序 ...