lda算法代码java,Lda算法

降维算法之LDA(线性判别降维算法)--有监督

LDA在模式识别领域( 比如人脸识别,舰艇识别等图形图像识别领域 )中有非常广泛的应用,因此我们有必要了解下它的算法原理。  

专业从事成都网站制作、成都做网站,高端网站制作设计,微信小程序开发,网站推广的成都做网站的公司。优秀技术团队竭力真诚服务,采用H5网站设计+CSS3前端渲染技术,成都响应式网站建设公司,让网站在手机、平板、PC、微信下都能呈现。建站过程建立专项小组,与您实时在线互动,随时提供解决方案,畅聊想法和感受。

不同于PCA方差最大化理论, LDA算法的思想是将数据投影到低维空间之后,使得同一类数据尽可能的紧凑,不同类的数据尽可能的分散 。因此,LDA算法是一种有监督的机器学习算法。同时,LDA有如下两个假设:(1)原始数据根据样本均值进行分类。(2)不同类的数据拥有相同的协方差矩阵。当然,在实际情况中,不可能满足以上两个假设。但是 当数据主要是由均值来区分的时候,LDA一般都可以取得很好的效果 。

(1)计算类内散度矩阵

(2)计算类间散度矩阵

(3)计算矩阵

(4)对矩阵 进行特征分解,计算最大的d个最大的特征值对应的特征向量组成W。

(5)计算投影后的数据点

以上就是使用LDA进行降维的算法流程。实际上LDA除了可以用于降维以外,还可以用于分类。 一个常见的LDA分类基本思想是假设各个类别的样本数据符合高斯分布 , 这样利用LDA进行投影后,可以利用极大似然估计计算各个累呗投影数据的均值和方差,进而得到该类别高斯分布的概率密度函数 。当一个新的样本到来后,我们可以将它投影,然后将投影后的样本特征分别带入各个类别的高斯分布概率密度函数,计算它属于这个类别的概率,最大的概率对应的类别即为预测类别。LDA应用于分类现在似乎也不是那么流行。

class sklearn.discriminant_analysis.LinearDiscriminantAnalysis(solver='svd', shrinkage=None, priors=None, n_components=None, store_covariance=False, tol=0.0001)

参数:

(1)solver: str类型,默认值为"svd",

svd:使用奇异值分解求解,不用计算协方差矩阵,适用于特征数量很大的情形,无法使用参数收缩(shrinkage)。

lsqr:最小平方QR分解,可以结合shrinkage使用。

eigen:特征值分解,可以结合shrinkage使用。

(2)shrinkage: str or float类型,默认值为None

是否使用参数收缩

None:不使用参数收缩

auto:str,使用Ledoit-Wolf lemma

浮点数:自定义收缩比例。

(3)components:int类型,需要保留的特征个数,小于等于n-1

属性:

(1)covariances_:每个类的协方差矩阵,shape = [n_features, n_features]

(2)means_:类均值,shape = [n_features, n_feateures]

(3)priors_:归一化的先验概率。

(4)rotations_:LDA分析得到的主轴,shape = [n_features, n_component]

(5)scalings_:数组列表,每个高斯分布的方差σ

特点:

    降维之后的维数最多为类别数-1。所以当数据维度很高,但是类别数少的时候,算法并不适用 。LDA算法既可以用来降维,又可以用来分类。但是目前来说,主要还是用于降维。在我们 进行图像识别相关的数据分析时,LDA是一个有力的工具 。

优点:

(1) LDA在样本分类信息依赖均值而不是方差的时候,比PCA之类的算法较优 。

(2)在降维过程中可以使用类别的先验知识经验,而像PCA这样的无监督学习则无法使用类别先验知识。

缺点:

(1)LDA不适合非高斯分布样本进行降维,PCA也存在这个问题。

(2)LDA降维最多降到类别数K-1的维数,如果我们降维的维度大于k-1,则不能使用LDA。 当然目前有一些LDA的进化版算法可以绕过这个问题 。

(3) LDA在样本分类信息依赖方差而不是均值的时候,降维效果不好 。

(4)LDA可能过度拟合数据。

二者都有 降维 的作用。

1.左 边是PCA,属于无监督方法 ,当数据没有标签时可以用它。 右边是LDA,属于监督学习方法 。考虑了数据的分类信息,这样数据在低维空间上就可以分类了,减少了很多的运算量。

2. PCA主要是从特征的协方差角度考虑,追求的是在降维之后能够最大化保持数据的内在信息 。它不考虑分类信息,因此降低维度后,信息损失降到最低,但分类上可能会变得更加困难。 LDA追求的是降维后的数据点尽可能容易被区分 。降维后的样本数据在新的维度空间有最大的类间距离和最小的类内方差,数据在低维空间有最佳的可分离性。

3. PCA降维后的维度数目是和数据维度相关的 ,原始数据是n维,那么PCA后维度为1、2~n维。 LDA后的维度数目是和类别的个数相关的 ,原始数据是n维,一共有C个类别,那么LDA后维度为1、2~C-1维。

4. PCA投影的坐标系都是正交的 。 LDA关注分类能力,不保证投影到的坐标系是正交的 。

降维算法二:LDA(Linear Discriminant Analysis)

学习分类算法,线性分类器最简单的就是LDA,它可以看做是简化版的SVM,如果想理解SVM这种分类器,那理解LDA就是很有必要的了。

谈到LDA,就不得不谈谈PCA,PCA是一个和LDA非常相关的算法,从推导、求解、到算法最终的结果,都有着相当的相似。

本次的内容主要是以推导数学公式为主,都是从算法的物理意义出发,然后一步一步最终推导到最终的式子,LDA和PCA最终的表现都是解一个矩阵特征值的问题,但是理解了如何推导,才能更深刻的理解其中的含义。本次内容要求读者有一些基本的线性代数基础,比如说特征值、特征向量的概念,空间投影,点乘等的一些基本知识等。除此之外的其他公式、我都尽量讲得更简单清楚。

LDA的全称是Linear Discriminant Analysis(线性判别分析),是一种 supervised learning 。有些资料上也称为是Fisher’s Linear Discriminant,因为它被Ronald Fisher发明自1936年,Discriminant这次词我个人的理解是,一个模型,不需要去通过概率的方法来训练、预测数据,比如说各种贝叶斯方法,就需要获取数据的先验、后验概率等等。LDA是在 目前机器学习、数据挖掘领域经典且热门的一个算法 ,据我所知,百度的商务搜索部里面就用了不少这方面的算法。

LDA的原理是,将带上标签的数据(点),通过投影的方法,投影到维度更低的空间中,使得投影后的点,会形成按类别区分,一簇一簇的情况,相同类别的点,将会在投影后的空间中更接近。要说明白LDA,首先得弄明白线性分类器( Linear Classifier ):因为LDA是一种线性分类器。对于K-分类的一个分类问题,会有K个线性函数:

上式实际上就是一种投影,是将一个高维的点投影到一条高维的直线上,LDA最求的目标是,给出一个标注了类别的数据集,投影到了一条直线之后,能够使得点尽量的按类别区分开,当k=2即二分类问题的时候,如下图所示:

红色的方形的点为0类的原始点、蓝色的方形点为1类的原始点,经过原点的那条线就是投影的直线,从图上可以清楚的看到,红色的点和蓝色的点被原点明显的分开了,这个数据只是随便画的,如果在高维的情况下,看起来会更好一点。下面我来推导一下二分类LDA问题的公式:

假设用来区分二分类的直线(投影函数)为:

LDA分类的一个目标是使得不同类别之间的距离越远越好,同一类别之中的距离越近越好,所以我们需要定义几个关键的值。

类别i的原始中心点为:(Di表示属于类别i的点)

类别i投影后的中心点为:

衡量类别i投影后,类别点之间的分散程度(方差)为:

最终我们可以得到一个下面的公式,表示LDA投影到w后的损失函数:

分类的目标是, 使得类别内的点距离越近越好(集中),类别间的点越远越好。 分母表示每一个类别内的方差之和,方差越大表示一个类别内的点越分散,分子为两个类别各自的中心点的距离的平方,我们最大化J(w)就可以求出最优的w了。想要求出最优的w,可以使用拉格朗日乘子法,但是现在我们得到的J(w)里面,w是不能被单独提出来的,我们就得想办法将w单独提出来。

我们定义一个投影前的各类别分散程度的矩阵,这个矩阵看起来有一点麻烦,其实意思是,如果某一个分类的输入点集Di里面的点距离这个分类的中心店mi越近,则Si里面元素的值就越小,如果分类的点都紧紧地围绕着mi,则Si里面的元素值越更接近0.

同样的将J(w)分子化为:

我们希望 分母越小越好,分子越大越好 :

分母小,则每个类内部数据点比较聚集;

分子大,则两个类别的距离较远。

所以需要找出一个 W 使 J(W) 的值最大。

这样就可以用最喜欢的拉格朗日乘子法了,但是还有一个问题,如果分子、分母是都可以取任意值的,那就会使得有无穷解,我们将分母限制为长度为1(这是用拉格朗日乘子法一个很重要的技巧,在下面将说的PCA里面也会用到,如果忘记了,请复习一下高数),并作为拉格朗日乘子法的限制条件,带入得到:

这样的式子就是一个求特征值的问题了。

对于N(N2)分类的问题,我就直接写出下面的结论了:

二者都有降维的作用。

数据降维方法介绍(六)

姓名:何源  学号:21011210073  学院:通信工程学院

【嵌牛导读】线性鉴别分析方法介绍

【嵌牛鼻子】线性鉴别分析(LDA)

【嵌牛提问】线性鉴别分析方法如何降维以及原理是什么?

【嵌牛正文】

LDA是一种监督学习的降维技术,也就是说它的数据集的每个样本是有类别输出的。LDA的思想可以用一句话概括,就是“投影后类内方差最小,类间方差最大”。假设有两类数据,分别为红色和蓝色,如下图1所示,这些数据特征是二维的,希望将这些数据投影到一维的一条直线,让每一种类别数据的投影点尽可能的接近,而红色和蓝色数据中心之间的距离尽可能的大。

从直观上可以看出,右图要比左图的投影效果好,因为右图的黑色数据和蓝色数据各个较为集中,且类别之间的距离明显。左图则在边界处数据混杂。以上就是LDA的主要思想了,当然在实际应用中,数据是多个类别的,我们的原始数据一般也是超过二维的,投影后的也一般不是直线,而是一个低维的超平面。

LDA算法既可以用来降维,又可以用来分类,但是目前来说,主要还是用于降维。在进行图像识别相关的数据分析时,LDA是一个有力的工具。下面总结下LDA算法的优缺点。

优点:

(1)在降维过程中可以使用类别的先验知识经验,而像PCA这样的无监督学习则无法使用类别先验知识;

(2)LDA在样本分类信息依赖均值而不是方差的时候,比PCA之类的算法较优。

缺点:

(1)LDA不适合对非高斯分布样本进行降维,PCA也有这个问题;

(2)LDA降维最多降到类别数k-1的维数,如果我们降维的维度大于k-1,则不能使用LDA。当然目前有一些LDA的进化版算法可以绕过这个问题;

(3)LDA在样本分类信息依赖方差而不是均值的时候,降维效果不好;

(4)LDA可能过度拟合数据。

无监督第五节:LDA (Latent Dirichlet Allocation算法细节)(主题模型)

LDA是生成式概率模型。基本的观点是一个文档由多个隐主题生成,每个主题是由单词的分布式表达。

LDA假设在语料库D中每个文档的生成过程如下:

1.主题数量k已知

2.单词的概率由参数 控制

参数 是一个k 维的向量,并且每个元素大于0, 服从Gamma 分布

已知参数 , 联合分布主题混合的参数 , 表示主题的参数 z,表示文档的参数w:

对 积分,并对z求和得到关于文档的边缘分布:

所有文档的边缘分布相乘,得到整个语料库的概率:

参数 和参数 是语料库级别的参数,在生成语料库的过程中使用。

变量 是文档级别的参数,每个文档采样一次。

变量 和 是单词级别的参数,每个文档中每个单词都采样一次.

一组随机变量如果联合分布和变量的排列顺序无关,则称这组变量是可交换的。

在LDA中,我们假设单词是由主题生成的,并且这些主题在文档中是无限可交换的,

其中 是关于主题多项式分布的随机变量。

通过对隐主题变量z积分。可以得到单词分布:

这是一个随机量,因为他依赖于

我们定义接下来的生成过程, 对于一个文档 w

1.选择θ∼Dir(α)

2.对于每个N的单词 :

(a)从 中选择一个单词

这个过程定义一篇文档的边缘分布看成一个连续的混合分布

inference的关心的问题使用LDA来计算隐变量z的后验分布:

这个分布通常很难计算。通过normaliza 分布,并且计算边缘分布。

这个后验分布很难计算,但是通过一些变分推断的方法还是可以得到。

基本的观点是使用jensen's 不等式来获得一个调整的下界,变分参数通过优化过程来试图找到最接近的可能的下界。

一个简单的方式是通过鲜花原始的计算图,将一些边和节点移去。在LDA中,原始的图是左图,通过把 移去,生成右边含有自由变分参数的图。

新的计算图使用如下变分分布:

是狄利克雷参数,多项式参数(φ1 , . . . , φ N ) 是自由变量参数。

得到简化的概率分布后,下一步是开始的优化问题是决定变分参数 的值。

优化这个变分参数是通过最小化KL散度来实现,并且吧他们设为0,得到以下的更新参数。

在文本的语言中,优化参数 是文档制定的。特别的,我们认为狄利克雷参数 是一个文档的主题表达。

经验贝叶斯方法来估计LDA中的参数。给定一个语料D,我们希望找到参数 来最大化边缘似然概率:

计算 比较困难,可以通过变分EM算法来估计。

1.E step,对于每个文档,找到最优的变分参数 。

2.M step, 最大化结果的下界。

重复上述几步直到下界收敛。


当前文章:lda算法代码java,Lda算法
转载来源:http://ybzwz.com/article/dssgeod.html