机器学习-降维方法-有监督学习:LDA算法(线性判别分析)【流程:①类内散度矩阵Sw->②类间散度矩阵Sb->计算Sw^-1Sb的特征值、特征向量W->得到投影矩阵W->将样本X通过W投影进行降维】
LDA (Linear Discriminant Analysis, 线性判别分析)是一种有监督学习算法,同时经常被用来对数据进行降维。
相比于PCA,LDA可以作为一种有监督的降维算法。在PCA中,算法没有考虑数据的标签(类别),PCA只是把原数据映射到一些方差比较大的方向上而已。
LDA是一种监督学习的降维技术,也就是说它的数据集的每个样本是有类别输出的。这点和PCA不同。PCA是不考虑样本类别输出的无监督降维技术。
LDA的中心思想:投影后类内方差最小,类间方差最大。要将数据在低维度上进行投影,投影后希望每一种类别数据的投影点尽可能的接近,而不同类别的数据的类别中心之间的距离尽可能的大。
上图中国提供了两种投影方式,哪一种能更好的满足我们的标准呢?从直观上可以看出,右图要比左图的投影效果好,因为:
- 右图的红色数据和蓝色数据各个较为集中,且类别之间的距离明显。
- 左图则在边界处数据混杂。
以上就是LDA的主要思想了,当然在实际应用中,我们的数据是多个类别的,我们的原始数据一般也是超过二维的,投影后的也一般不是直线,而是一个低维的超平面。
一、LDA数学推导
1、“协方差矩阵”、“散度矩阵” 的关系
在机器学习模式识别中,经常需要应用到协方差矩阵C和散布矩阵S。如在PCA主成分分析中,需要计算样本的散度矩阵,有的论文是计算协方差矩阵。实质上二者意义差不多,散布矩阵(散度矩阵)前乘以系数1/(n-1)就可以得到协方差矩阵了。
在模式识别的教程中,散布矩阵也称为散度矩阵,有的也称为类内离散度矩阵或者类内离差阵,用一个等式关系可表示为:
散度矩阵=类内离散度矩阵=类内离差阵=协方差矩阵×(n-1)\text{散度矩阵=类内离散度矩阵=类内离差阵=协方差矩阵×(n-1)}散度矩阵=类内离散度矩阵=类内离差阵=协方差矩阵×(n-1)
2、LDA的原理
现在我们首先从比较简单的二类LDA入手,严谨的分析LDA的原理:
- 假设我们的数据集D={(x1,y1),(x2,y2),...,((xm,ym))}D=\{(x_1,y_1), (x_2,y_2), ...,((x_m,y_m))\}D={(x1,y1),(x2,y2),...,((xm,ym))},其中任意样本xix_ixi为n维向量,yi∈{0,1}y_i \in \{0,1\}yi∈{0,1}。我们定义Nj(j=0,1)N_j(j=0,1)Nj(j=0,1)为第j类样本的个数,Xj(j=0,1)X_j(j=0,1)Xj(j=0,1)为第j类样本的集合,而μj(j=0,1)\mu_j(j=0,1)μj(j=0,1)为第j类样本的均值向量,定义Σj(j=0,1)\Sigma_j(j=0,1)Σj(j=0,1)为第j类样本的协方差矩阵(严格说是缺少分母部分的协方差矩阵)。
- μj\mu_jμj的表达式为:μj=1Nj∑x∈Xjx(j=0,1)\mu_j = \frac{1}{N_j}\sum\limits_{x \in X_j}x\;\;(j=0,1)μj=Nj1x∈Xj∑x(j=0,1)
- Σj\Sigma_jΣj的表达式为:Σj=∑x∈Xj(x−μj)(x−μj)T(j=0,1)\Sigma_j = \sum\limits_{x \in X_j}(x-\mu_j)(x-\mu_j)^T\;\;(j=0,1)Σj=x∈Xj∑(x−μj)(x−μj)T(j=0,1)
- 由于是两类数据,因此我们只需要将数据投影到一条直线上即可。假设我们的投影直线是向量www,则对任意一个样本本xix_ixi,它在直线www的投影为wTxiw^Tx_iwTxi,对于我们的两个类别的中心点μ0,μ1\mu_0,\mu_1μ0,μ1,在在直线www的投影为wTμ0w^T\mu_0wTμ0和wTμ1w^T\mu_1wTμ1。由于LDA需要让不同类别的数据的类别中心之间的距离尽可能的大,也就是我们要最大化∣∣wTμ0−wTμ1∣∣22||w^T\mu_0-w^T\mu_1||_2^2∣∣wTμ0−wTμ1∣∣22,同时我们希望同一种类别数据的投影点尽可能的接近,也就是要同类样本投影点的协方差wTΣ0ww^T\Sigma_0wwTΣ0w和wTΣ1ww^T\Sigma_1wwTΣ1w尽可能的小,即最小化wTΣ0w+wTΣ1ww^T\Sigma_0w+w^T\Sigma_1wwTΣ0w+wTΣ1w。综上所述,我们的优化目标为:argmax⏟wJ(w)=∣∣wTμ0−wTμ1∣∣22wTΣ0w+wTΣ1w=wT(μ0−μ1)(μ0−μ1)TwwT(Σ0+Σ1)w\underbrace{arg\;max}_w\;\;J(w) = \frac{||w^T\mu_0-w^T\mu_1||_2^2}{w^T\Sigma_0w+w^T\Sigma_1w} = \frac{w^T(\mu_0-\mu_1)(\mu_0-\mu_1)^Tw}{w^T(\Sigma_0+\Sigma_1)w}wargmaxJ(w)=wTΣ0w+wTΣ1w∣∣wTμ0−wTμ1∣∣22=wT(Σ0+Σ1)wwT(μ0−μ1)(μ0−μ1)Tw
- 我们一般定义类内散度矩阵SwS_wSw为:Sw=Σ0+Σ1=∑x∈X0(x−μ0)(x−μ0)T+∑x∈X1(x−μ1)(x−μ1)TS_w = \Sigma_0 + \Sigma_1 = \sum\limits_{x \in X_0}(x-\mu_0)(x-\mu_0)^T +\sum\limits_{x \in X_1}(x-\mu_1)(x-\mu_1)^TSw=Σ0+Σ1=x∈X0∑(x−μ0)(x−μ0)T+x∈X1∑(x−μ1)(x−μ1)T
- 同时定义类间散度矩阵SbS_bSb为:Sb=(μ0−μ1)(μ0−μ1)TS_b = (\mu_0-\mu_1)(\mu_0-\mu_1)^TSb=(μ0−μ1)(μ0−μ1)T
- 这样我们的优化目标重写为:argmax⏟wJ(w)=wTSbwwTSww\underbrace{arg\;max}_w\;\;J(w) = \frac{w^TS_bw}{w^TS_ww} wargmaxJ(w)=wTSwwwTSbw
- 要最大化 J(w)J(w)J(w),只需要对 www 求偏导,并令导数等于0:
- 于是得出,
- 由于在简化的二分类问题中ωTSwω和ωTSBω是两个数,我们令
- 于是得:
- 整理得:
- 从这里我们可以看出,我们最大化的目标对应了一个矩阵的特征值,于是LDA降维变成了一个求矩阵特征向量的问题。J(ω)就对应了矩阵 Sw−1SBS_w^{−1}S_BSw−1SB最大的特征值,而投影方向就是这个特征值对应的特征向量。
- 对于二分类这一问题,由于 SB=(μ1−μ2)(μ1−μ2)TS_B=(\mu_1-\mu_2)(\mu_1-\mu_2)^TSB=(μ1−μ2)(μ1−μ2)T,因此 SBωS_BωSBω的方向始终与(μ1−μ2)(μ_1−μ_2)(μ1−μ2)一致,如果只考虑ω的方向,不考虑其长度,可以得到
ω=Sw−1(μ1−μ2)ω = S_w^{−1}(\mu_1-\mu_2)ω=Sw−1(μ1−μ2)
换句话说,我们只需要求 样本的均值 和 类内方差,就可以马上得出最佳的投影方向 ωωω。这便是Fisher在1936年提出的线性判别分析。
二、LDA算法流程
输入:数据集 D={(x1,y1),(x2,y2),...,((xm,ym))}D=\{(x_1,y_1), (x_2,y_2), ...,((x_m,y_m))\}D={(x1,y1),(x2,y2),...,((xm,ym))},其中任意样本 xix_ixi 为 nnn 维向量,yi∈{C1,C2,...,Ck}y_i \in \{C_1,C_2,...,C_k\}yi∈{C1,C2,...,Ck},降维到的维度 ddd。
输出:降维后的样本集 D′D'D′
- 计算类内散度矩阵:SwS_wSw;
- 计算类间散度矩阵:SbS_bSb
- 计算矩阵:Sw−1SbS_w^{-1}S_bSw−1Sb;
- 计算Sw−1SbS_w^{-1}S_bSw−1Sb的最大的 ddd 个特征值和对应的 ddd 个特征向量 (w1,w2,...wd)(w_1,w_2,...w_d)(w1,w2,...wd),得到投影矩阵 WWW;
- 对样本集中的每一个样本特征 xix_ixi ,转化为新的样本 zi=WTxiz_i=W^Tx_izi=WTxi;
- 得到输出样本集 D′={(z1,y1),(z2,y2),...,((zm,ym))}D'=\{(z_1,y_1), (z_2,y_2), ...,((z_m,y_m))\}D′={(z1,y1),(z2,y2),...,((zm,ym))};
以上就是使用LDA进行降维的算法流程。
实际上LDA除了可以用于降维以外,还可以用于分类。
一个常见的LDA分类基本思想是假设各个类别的样本数据符合高斯分布,这样利用LDA进行投影后,可以利用极大似然估计计算各个类别投影数据的均值和方差,进而得到该类别高斯分布的概率密度函数。
当一个新的样本到来后,我们可以将它投影,然后将投影后的样本特征分别带入各个类别的高斯分布概率密度函数,计算它属于这个类别的概率,最大的概率对应的类别即为预测类别。
由于LDA应用于分类现在似乎也不是那么流行,至少我们公司里没有用过,这里我就不多讲了。
三、PCA与LDA对比
首先我们看看相同点:
- 两者均可以对数据进行降维。
- 两者在降维时均使用了矩阵特征分解的思想。
- 两者都假设数据符合高斯分布。
我们接着看看不同点:
- LDA是有监督的降维方法,而PCA是无监督的降维方法
- LDA降维最多降到类别数k-1的维数,而PCA没有这个限制。
- LDA除了可以用于降维,还可以用于分类。
- LDA选择分类性能最好的投影方向,而PCA选择样本点投影具有最大方差的方向。
这点可以从下图形象的看出,在某些数据分布下LDA比PCA降维较优。
当然,某些某些数据分布下PCA比LDA降维较优,如下图所示:
1、从数学推导的角度,PCA与LDA有何区别与联系?
相同点:都转化为求解矩阵特征值、特征向量的问题。
不同点:
- PCA选择的是投影后数据方差最大的方向。由于它是无监督的,因此PCA假设方差越大,信息量越多,用主成分来表示原始数据可以去除冗余的维度,达到降维。
- LDA选择的是投影后类内方差小、类间方差大的方向。其用到了类别标签信息,为了找到数据中具有判别性的维度,使得原始数据在这些方向上投影后,不同类别尽可能区分开。
2、如何从应用的角度分析其原理的异同?
- 从应用的角度,我们可以掌握一个基本的原则:对无监督的任务使用PCA进行降维,对有监督的则应用LDA。
- LDA是一种监督学习的降维技术,也就是说它的数据集的每个样本是有类别输出的。这点和PCA不同。
- PCA是不考虑样本类别输出的无监督降维技术。
四、LDA算法小结
LDA算法既可以用来降维,又可以用来分类,但是目前来说,主要还是用于降维。在我们进行图像识别图像识别相关的数据分析时,LDA是一个有力的工具。下面总结下LDA算法的优缺点。
LDA算法的主要优点有:
- 在降维过程中可以使用类别的先验知识经验,而像PCA这样的无监督学习则无法使用类别先验知识。
- LDA在样本分类信息依赖均值而不是方差的时候,比PCA之类的算法较优。
LDA算法的主要缺点有:
- LDA不适合对非高斯分布样本进行降维,PCA也有这个问题。
- LDA降维最多降到类别数-1的维数,如果我们降维的维度大于k-1,则不能使用LDA。当然目前有一些LDA的进化版算法可以绕过这个问题。
- LDA在样本分类信息依赖方差而不是均值的时候,降维效果不好。
- LDA可能过度拟合数据。
参考资料:
线性判别分析LDA原理总结
LDA和PCA降维总结
线性判别分析LDA降维只能降到“类别数-1”的原因
用线性判别分析 LDA 降维
协方差矩阵和散布矩阵(散度矩阵)的意义
机器学习-降维方法-有监督学习:LDA算法(线性判别分析)【流程:①类内散度矩阵Sw->②类间散度矩阵Sb->计算Sw^-1Sb的特征值、特征向量W->得到投影矩阵W->将样本X通过W投影进行降维】相关推荐
- 数据降维方法(主成分分析PCA、线性判别分析LDA)
数据降维 1.特征变换 1.1.特征提取 2.维数缩减 2.1.维度灾难 2.2.维度缩减 2.3.线性降维法 2.3.1.主成分分析(PCA) 2.3.1.1.数学分析 2.3.1.2.算法步骤 2 ...
- 机器学习(三):一文读懂线性判别分析(LDA)
一.什么是线性判别分析? 线性判别分析(Linear Discriminant Analysis,LDA)的一种经典的线性学习方法(属于监督学习),这里先借用周志华教授的<机器学习>中的图 ...
- 机器学习-Sklearn-07(无监督学习聚类算法KMeans)
机器学习-Sklearn-07(无监督学习聚类算法KMeans) 学习07 1 概述 1.1 无监督学习与聚类算法 聚类算法又叫做"无监督分类",其目的是将数据划分成有意义或有用的 ...
- PCA(主成分分析)+LDA(线性判别分析)+区别
PCA(主成分分析)+LDA(线性判别分析)+区别 一.LDA算法 基本思想:LDA是一种监督学习的降维技术,也就是说它的数据集的每个样本是有类别输出的.这点和PCA不同.PCA是不考虑样本类别输出的 ...
- 降维方法之PCA,LDA
降维的目的 减少冗余信息造成的误差,提高数据信息的精度. PCA 主成分分析 Principal Component Analysis(PCA)主成分分析,是最常用的线性降维方法,无监督的,它通过某种 ...
- MATLAB实现LDA(线性判别分析),以两个类别数目为例
%LDA 线性判别分析,以两个类别数目为例 function [w,c] = myLDA(X,Y) %X-数据矩阵,Y-类标签 idx0 = find(Y==0);idx1 = find(Y==1); ...
- 周志华《机器学习》3.5答案-编程实现线性判别分析,并给出西瓜数据集3.0α上的结果
#机器学习线性判别分析3.5题 import numpy as np import matplotlib.pyplot as plt data = [[0.697, 0.460, 1],[0.774, ...
- 机器学习之降维方法(LDA、PCA)小结
1 线性判别分析(LDA) 1.1 LDA简介 LDA是一种监督学习的降维技术,也就是说它的数据集的每个样本是有类别输出的.一句话来概括LDA的核心思想,[投影后类内方差最小,类间方差最大].我们将数 ...
- 线性降维:PCA、LDA、MDS
1. KNN 为什么要在介绍降维之前学习KNN呢?因为以KNN为代表的一类算法,由于其为非参数化模型,无法通过一组固定的参数和固定的模型进行表征.此外,KNN还是惰性学习算法的典型例子.惰性是指它仅仅 ...
- 07_数据降维,降维算法,主成分分析PCA,NMF,线性判别分析LDA
1.降维介绍 保证数据所具有的代表性特性或分布的情况下,将高维数据转化为低维数据. 聚类和分类都是无监督学习的典型任务,任务之间存在关联,比如某些高维数据的分类可以通过降维处理更好的获得. 降维过程可 ...
最新文章
- win7 64位系统连接xp 32位共享打印机办法
- ajax重复被调用,重复jQuery ajax调用
- bat 取得服务列表_基于IDEA热部署更新服务器Tomcat类,服务器Tomcat热更新
- php数组保存txt,php将数组存储为文本文件方法汇总,_PHP教程
- .NET开发Windows Service程序 - Topshelf
- 开通博客园,新的网络生活的开始
- linux for循环
- css-选择器-进阶-属性选择器-组选择器-nth选择器
- 补习系列(12)-springboot 与邮件发送
- 无人车前轮转向分辨率校准
- Render Monkey中可渲染纹理的Clear Color
- php 用pdf转html,使用PHP将HTML PDF转换为PDF
- 自动驾驶-激光雷达预处理/特征提取
- 【数据结构】NOJ016—计算二叉树叶子结点数目
- Android平台语言支持状态(MTK6589)
- 以前手机应用java咖啡_作为编程语言的“java”怎么就成了咖啡的代称?
- DTC(Deep Temporal Clustering--Fully Unsupervised Learning of Time-Domain Features)论文理解
- EasyAR_实现扫描识别图播放视频
- Linux面试指令---nl指令
- Swift 编译器中间码 SIL
热门文章
- Python智能对话机器人实现
- Artistic Style Dev CPP 运算符 前后空格
- 科学计算机带度分秒,科学计算器度分秒
- 简明python教程最新版价格_《简明Python教程》【价格 目录 书评 正版】_中国图书网...
- 虎牙tv是用php写的吗,huya虎牙php_麦麦同学
- jmeter5.4.1插件管理器下载安装-Jmeter-plugins-manager
- 网络安全渗透实战详细详解
- 几种数字仿真的物理意义与代码实现
- python进阶路线 知乎_Python自学路线图之Python进阶
- php常用的函数总结