数据降维

一、 线性判别分析(LDA)

linear Discriminant Analysis

用途:

数据预处理中的降维,分类任务

目标:

LDA关心的是能够最大化类间区分度的坐标轴成分
将特征空间(数据集中的多位样本)投影到一个维度更加小的Kw维子空间中,同时保持区分类别的信息

原理

投影到维度更低的空间,使得投影后的点,会形成按照类别区分,一簇一簇的情况,相同类别的点,将会在投影后的空间中更接近方法

监督性:LDA是‘有监督’的,它的计算是另一类特定的方向
投影:找到更合适分类的空间
与PCA不同,更关心分类而不是方差

数学原理

原始数据

变换数据

目标

找到投影该投影: y=wT∗xy = w^{T} * xy=wT∗x
LDA分类的一个目标是使得不同类别之间的距离越远越好,
同一个类别之间的距离越近越好
每类样例的均值:μi=1Ni∑x∈ωix\mu_{i} = \frac{1}{N_{i}}\sum_{x \in \omega_{i}} xμi​=Ni​1​∑x∈ωi​​x
投影后的均值:μi~=1Ni∑x∈ωiy=1Ni∑x∈ωiwT∗x=wTμi\widetilde{\mu_{i}}=\frac{1}{N_{i}}\sum_{x \in \omega_{i}} y = \frac{1}{N_{i}}\sum_{x \in \omega_{i}} w^{T} * x = w^{T}\mu_{i}μi​​=Ni​1​∑x∈ωi​​y=Ni​1​∑x∈ωi​​wT∗x=wTμi​
投影后的两类样本中心点尽量分离:
J(w)=∣μ1~−μ2~∣=∣wT(μ1−μ2)∣J(w) = |\widetilde{\mu_{1}}-\widetilde{\mu_{2}}| = |w^T(\mu_{1}-\mu_{2})|J(w)=∣μ1​​−μ2​​∣=∣wT(μ1​−μ2​)∣

不仅是要考虑最大化J(w)J(w)J(w)
还有 散列值 μi\mu_{i}μi​样本的密集程度,值越大,越分散,反之,越集中
同类之间应该越密集些:μi=1Ni∑x∈ωi(y−μi~)2\mu_{i} = \frac{1}{N_{i}}\sum_{x \in \omega_{i}}(y-\widetilde{\mu_{i}})^2μi​=Ni​1​∑x∈ωi​​(y−μi​​)2

如下图,如果映射到X1轴上,数据较为分散,而且红色的数据簇和蓝色的数据簇会重合,无法分开,而投影到X2轴上虽然J(wJ(wJ(w小了,可是数据却比较集中,分类效果相对于X1轴会比较好

目标函数:j(w)=∣μ1~−μ2~∣2S1~2+S2~2{j(w)}=\frac{|\widetilde{\mu_{1}}-\widetilde{\mu_{2}}|^2}{\widetilde{S_{1}}^2+\widetilde{S_{2}}^2}j(w)=S1​​2+S2​​2∣μ1​​−μ2​​∣2​
散列值公式展开:Si~2=∑y∈ωi(y−μi~)2=∑x∈ωi(wTx−wTμi)2=∑x∈ωi(x−μi)(x−μi)Tw\widetilde{S_{i}}^2=\sum_{y \in \omega_{i}}(y-\widetilde{\mu_{i}})^2=\sum_{x\in\omega_{i}}(w^Tx-w^T\mu_{i})^2=\sum_{x\in\omega_{i}}(x-\mu_{i})(x-\mu_{i})^TwSi​​2=∑y∈ωi​​(y−μi​​)2=∑x∈ωi​​(wTx−wTμi​)2=∑x∈ωi​​(x−μi​)(x−μi​)Tw
散列矩阵(scatter matrices):
Si=∑x∈ωi(x−μi)(x−μi)TS_{i}=\sum_{x\in\omega_{i}}(x-\mu_{i})(x-\mu_{i})^TSi​=∑x∈ωi​​(x−μi​)(x−μi​)T
**类内散布矩阵Sw=S1+S2S_{w}=S_{1}+S_{2}Sw​=S1​+S2​:
Si~2=wTSiw\widetilde{S_{i}}^2=w^TS_{i}wSi​​2=wTSi​w ======> s1~2+s2~2=wTSww\widetilde{s_{1}}^2+\widetilde{s_{2}}^2=w^TS_{w}ws1​​2+s2​​2=wTSw​w

目标函数:J(w)=∣μ1~−μ2~∣2=wT(μ1−μ2)(μ1−μ2)Tw=wTSBwJ(w)=|\widetilde{\mu_{1}}-\widetilde{\mu_{2}}|^2=w^T(\mu_{1}-\mu_{2})(\mu_{1}-\mu_{2})^Tw=w^TS_{B}wJ(w)=∣μ1​​−μ2​​∣2=wT(μ1​−μ2​)(μ1​−μ2​)Tw=wTSB​w
SBS_{B}SB​称为类间散布矩阵
最终目标函数:J(w)=wTSBwwTSwwJ(w)=\frac{w^TS_{B}w}{w^TS_{w}w}J(w)=wTSw​wwTSB​w​
不过,如果分子分母都是可以取任意值的,那就会使得有无穷解,我们将分母限制为长度为1
根据拉格朗日乘子法:
c(w)=wTSBw−λ(wTSww−1)=>dcdw=2SBw−2λSww==>Sbw=λSwwc(w)=w^TS_{B}w-\lambda(w^TS_{w}w-1) =>\frac{dc}{dw}=2S_{B}w-2\lambda S_{w}w==>S_{b}w=\lambda S_{w}wc(w)=wTSB​w−λ(wTSw​w−1)=>dwdc​=2SB​w−2λSw​w==>Sb​w=λSw​w
两边都乘以Sw的逆:S_{w}的逆:Sw​的逆:Sw−1SBw=λwS_{w}^{-1}S_{B}w=\lambda wSw−1​SB​w=λw(w就是矩阵Sw−1SBS_{w}^{-1}S_{B}Sw−1​SB​的特征向量)

二、主成分分析(PCA)

PCA(Principal Component Analysis)降维中最常用的一种手段为了提取最有价值的信息(基于方差)降维后,数据的物理意义就被模糊化了,此时可以通过数据降维来隐藏数据的真实信息。

基本数学概念

向量的表示及基变换

内积:(a1,a2,...,an)⋅(b1,b2,...,bn)=a1b1+a2b2+...+anbn(a_{1},a_{2},...,a_{n})\cdot(b_{1},b_{2},...,b_{n})=a_{1}b_{1}+a_{2}b_{2}+...+a_{n}b_{n}(a1​,a2​,...,an​)⋅(b1​,b2​,...,bn​)=a1​b1​+a2​b2​+...+an​bn​
也就是:A⋅B=∣A∣∣B∣cos(a)A\cdot B=|A||B|cos(a)A⋅B=∣A∣∣B∣cos(a) ,设向量B的模为1,则A与B的模为1,则A与B的内积等于A所在直线投影的矢量长度

向量可以表示为(3,2)实际上表示线性组合:x(1,0)T+y(0,1)Tx(1,0)^T+y(0,1)^Tx(1,0)T+y(0,1)T
基:(0,1)和(1,0)叫做二维空间中的一组基

基变换: 基是正交的(即内积为0,或者直观的说互相垂直)且线性无关
变换: 数据与一个基做内积运算,结果作为第一个新的坐标分量,然后与第二个基做内积运算,结果作为第二个新坐标的分量如数据(3,2)映射到基中坐标:
(1212−1212)(32)=(52−12)( \begin{matrix} \frac{1}{ \sqrt{2}} & \frac{1}{ \sqrt{2}} \\ -\frac{1}{ \sqrt{2}} & \frac{1}{ \sqrt{2}} \end{matrix}) (\begin{matrix}3\\2\end{matrix})=(\begin{matrix} \frac{5}{\sqrt{2}}\\ -\frac{1}{\sqrt{2}}\end{matrix})(2​1​−2​1​​2​1​2​1​​)(32​)=(2​5​−2​1​​)

两个矩阵相乘的意义是将右边矩阵中你的每一列列向量变换到左边矩阵中每一行行向量为基表示的空间去

协方差矩阵

方向: 如何选择这个方向(基)才能尽量保留最多的原始信息呢?一种直观的看法是:洗完投影值尽可能分散
方差: Var(a)=1m∑i=1m(ai−μ)2Var(a)=\frac{1}{m}\sum_{i=1}^{m}(a_{i}-\mu)^2Var(a)=m1​∑i=1m​(ai​−μ)2
寻找一个一维基,使得所有数据变换为这个基上的坐标表示后,方差值最大
协方差
协方差(假设均值为0时):Cov(a,b)=1m∑i=1maibiCov(a,b)=\frac{1}{m}\sum_{i=1}^{m}a_{i}b_{i}Cov(a,b)=m1​∑i=1m​ai​bi​
如果单纯只选择方差最大的方向,后续方向应该会和方差最大的方向接近重合。
解决方法: 为了让两个字段尽可能的表示更加多的原始信息,不希望他们之间存在(线性)相关性的,可以使用两个字段的协方差表示其相关性Cov(a,b)=∑i=1maibiCov(a,b)=\sum_{i=1}^{m}a_{i}b_{i}Cov(a,b)=∑i=1m​ai​bi​
当协方差为0时,表示两个字段完全独立。为了让协方差为0,选择第二个基时只能在与第一个基正交的方向上选择。因此最终选择两个方向一定是正交的(第一个2基在方差最大的方向上。第二个基与第一个基正交)。

优化目标

将一组N维向量降为K维(K大于0,小于N),目标是选择K个单位正交基,使原始数据变换到这组基后,各字段两两间协方差为0,字段的方差尽可能大
协方差矩阵:X=(a1a2...amb1b2...bm)X=\left(\begin{matrix} a_{1}&a_{2}&...&a_{m}\\b_{1}&b_{2}&...&b_{m}\end{matrix}\right)X=(a1​b1​​a2​b2​​......​am​bm​​)
1mXXT=(1m∑i=1mai21m∑i=1maibi1m∑i=1maibi1m∑i=1mbi2)\frac{1}{m}XX^T=\left(\begin{matrix} \frac{1}{m}\sum_{i=1}^{m}a_{i}^{2}& \frac{1}{m}\sum_{i=1}^{m}a_{i}b_{i}\\ \frac{1}{m}\sum_{i=1}^{m}a_{i}b_{i}& \frac{1}{m}\sum_{i=1}^{m}b_{i}^{2}\end{matrix}\right)m1​XXT=(m1​∑i=1m​ai2​m1​∑i=1m​ai​bi​​m1​∑i=1m​ai​bi​m1​∑i=1m​bi2​​)
矩阵对角线的两个元素分别是两个字段的方差,而其它元素是a和b的协方差。
协方差矩阵对角化: 即除对角线外其它的元素化为0,并且在对角线上将元素按大小从上到下排列
协方差矩阵对角化:PCPT=Λ=(λ1λ2⋱λn)PCP^T=\Lambda=\left(\begin{matrix}\lambda_{1}& &\\&&\lambda_{2}\\&& &\ddots\\&&&&\lambda_{n}\end{matrix}\right)PCPT=Λ=⎝⎜⎜⎛​λ1​​​λ2​​⋱​λn​​⎠⎟⎟⎞​
实对称矩阵:一个n行n列的实对称矩阵一定可以找到n个单位正交特征向量
E=(e1e2⋯en)E=\left(\begin{matrix}e_{1}&e_{2}&\cdots&e_{n}\end{matrix}\right)E=(e1​​e2​​⋯​en​​)
实对称矩阵可进行对角化:
ECET=Λ=(λ1λ2⋱λn)ECE^T=\Lambda=\left(\begin{matrix}\lambda_{1}& &\\&&\lambda_{2}\\&& &\ddots\\&&&&\lambda_{n}\end{matrix}\right)ECET=Λ=⎝⎜⎜⎛​λ1​​​λ2​​⋱​λn​​⎠⎟⎟⎞​
根据特征值得我从大到小,将特征向量从上到下排列,则用前K行组成的矩阵乘以原始数据矩阵X,就得到了我们需要降维后的数据矩阵Y

三、python实现

基于python的LDA和PCA实例(自己实现和调用现成的库)jupyter源码:
https://download.csdn.net/download/qq_37135484/11579884

LDA







PCA







LDA与PCA数据降维算法理论与实现(基于python)相关推荐

  1. lda 协方差矩阵_数据降维算法总结(LDAamp;PCA)

    LDA 概述 LDA(Linear Discriminant Analysis),线性判别分析.LDA是一种监督学习的降维技术.主要用于数据预处理中的降维.分类任务.LDA的目标是最大化类间区分度的坐 ...

  2. 机器学习(五)PCA数据降维

    PCA数据降维 原文地址:http://blog.csdn.net/hjimce/article/details/45000221 作者:hjimce 一.PCA相关理论 PCA算法又称主成分分析,是 ...

  3. ML之DR:基于鸢尾花(Iris)数据集利用多种降维算法(PCA/TSVD/LDA/TSNE)实现数据降维并进行二维和三维动态可视化应用案例

    ML之DR:基于鸢尾花(Iris)数据集利用多种降维算法(PCA/TSVD/LDA/TSNE)实现数据降维并进行二维和三维动态可视化应用案例 目录 基于鸢尾花(Iris)数据集利用多种降维算法(PCA ...

  4. python用tsne降维_哈工大硕士实现了 11 种经典数据降维算法,源代码库已开放

    网上关于各种降维算法的资料参差不齐,同时大部分不提供源代码.这里有个 GitHub 项目整理了使用 Python 实现了 11 种经典的数据抽取(数据降维)算法,包括:PCA.LDA.MDS.LLE. ...

  5. std中稳定排序算法_源代码库已开放 | 哈工大硕士生用 Python 实现了 11 种经典数据降维算法...

    转自:AI开发者 网上关于各种降维算法的资料参差不齐,同时大部分不提供源代码.这里有个 GitHub 项目整理了使用 Python 实现了 11 种经典的数据抽取(数据降维)算法,包括:PCA.LDA ...

  6. python 最优化算法库_哈工大硕士生用?Python 实现了 11 种经典数据降维算法,源代码库已开放...

    雷锋网 AI 开发者按:网上关于各种降维算法的资料参差不齐,同时大部分不提供源代码.这里有个 GitHub 项目整理了使用 Python 实现了 11 种经典的数据抽取(数据降维)算法,包括:PCA. ...

  7. 哈工大硕士生实现 11 种数据降维算法,代码已开源!

    网上关于各种降维算法的资料参差不齐,同时大部分不提供源代码.这里有个 GitHub 项目整理了使用 Python 实现了 11 种经典的数据抽取(数据降维)算法,包括:PCA.LDA.MDS.LLE. ...

  8. 文本处理算法_基于 Python 的 11 种经典数据降维算法

    网上关于各种降维算法的资料参差不齐,同时大部分不提供源代码.这里有个 GitHub 项目整理了使用 Python 实现了 11 种经典的数据抽取(数据降维)算法,包括:PCA.LDA.MDS.LLE. ...

  9. 基于 Python 的 11 种经典数据降维算法

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 网上关于各种降维算法的资料参差不齐,同时大部分不提供源代码.这里有 ...

最新文章

  1. 360safe:腾讯QQ也见不得人[图]
  2. VS集成opencv编译C++项目遇到的问题
  3. OpenBFDD的安装与使用
  4. 教你配置支付宝应用网关和授权回调地址
  5. 适合新手入门的8个python项目_推荐:一个适合于Python新手的入门练手项目
  6. android设置多个按钮,android代码中设置两个按钮之间位置
  7. beego原生mysql查询_Beego基础学习(五)Golang原生sql操作Mysql数据库增删改查(基于Beego下测试)...
  8. printf打印数组_彻底弄懂为什么不能把栈上分配的数组(字符串)作为返回值
  9. VS2010/MFC编程入门之四十四:定时器Timer
  10. 2017-06-02 前端日报
  11. php 写一个大富翁游戏,抽奖系列:如何用纯js做一个大富翁游戏
  12. 对R语言发展与历史的一个初步认识
  13. NDK开发之数组操作
  14. 女生也玩橄榄球?而且还有世界杯?!
  15. 输入工资,计算税后工资
  16. C语言常用的数学函数
  17. Typora保存文章到本地并查看源代码的方法(简)
  18. 跨越专业翻译的语言之墙:百度翻译的技术攀登
  19. 【MapBox实战】生成地图+绘制区域+纠偏
  20. Linux下提权常用小命令

热门文章

  1. 洛谷 P1194 买礼物 (题解+代码)
  2. 如何根据业务需求来选择合适的代理IP
  3. java根据某天获取当前周的日期
  4. springboot集成bboss操作elasticsearch索引,类型,文档(单集群)
  5. 关于C语言二级指针正确使用总结
  6. 海岸TDM平台性能-续
  7. 实验3 SQL的复杂多表查询以及视图
  8. 刷屏器!简单!快速!稳定!可控制速度!
  9. 我们游戏后台架构学习
  10. Java基础学习笔记(二)_Java核心技术(进阶)