精华内容
下载资源
问答
  • LDA算法MATLAB代码及其结果截图

    热门讨论 2010-08-07 17:23:16
    这是一个LDA算法,有实例分析,并给出数据进行验证预测。对于初学者很有帮助。
  • LDA算法-matlab代码实现

    万次阅读 2014-10-17 16:21:16
    本文使用LDA作为分类器在matlab下做实验。  其中投影转换矩阵W按照LDA的经典理论生成,如下的LDA函数,并返回各个类的投影后的(k-1)维的类均值。 LDA.m代码如下: function [W,centers]=LDA...

    本文使用LDA作为分类器在matlab下做实验。

      其中投影转换矩阵W按照LDA的经典理论生成,如下的LDA函数,并返回各个类的投影后的(k-1)维的类均值。

    LDA.m代码如下:

    复制代码
    function [W,centers]=LDA(Input,Target) % Ipuut: n*d matrix,each row is a sample; % Target: n*1 matrix,each is the class label % W: d*(k-1) matrix,to project samples to (k-1) dimention % cneters: k*(k-1) matrix,the means of each after projection % 初始化 [n dim]=size(Input); ClassLabel=unique(Target); k=length(ClassLabel); nGroup=NaN(k,1); % group count GroupMean=NaN(k,dim); % the mean of each value W=NaN(k-1,dim); % the final transfer matrix centers=zeros(k,k-1); % the centers of mean after projection SB=zeros(dim,dim); % 类间离散度矩阵 SW=zeros(dim,dim); % 类内离散度矩阵 % 计算类内离散度矩阵和类间离散度矩阵 for i=1:k group=(Target==ClassLabel(i)); nGroup(i)=sum(double(group)); GroupMean(i,:)=mean(Input(group,:)); tmp=zeros(dim,dim); for j=1:n if group(j)==1 t=Input(j,:)-GroupMean(i,:); tmp=tmp+t'*t; end end SW=SW+tmp; end m=mean(GroupMean); for i=1:k tmp=GroupMean(i,:)-m; SB=SB+nGroup(i)*tmp'*tmp; end % % W 变换矩阵由v的最大的K-1个特征值所对应的特征向量构成 % v=inv(SW)*SB; % [evec,eval]=eig(v); % [x,d]=cdf2rdf(evec,eval); % W=v(:,1:k-1); % 通过SVD也可以求得 % 对K=(Hb,Hw)'进行奇异值分解可以转换为对Ht进行奇异值分解.P再通过K,U,sigmak求出来 % [P,sigmak,U]=svd(K,'econ');=>[U,sigmak,V]=svd(Ht,0); [U,sigmak,V]=svd(SW,0); t=rank(SW); R=sigmak(1:t,1:t); P=SB'*U(:,1:t)*inv(R); [Q,sigmaa,W]=svd(P(1:k,1:t)) Y(:,1:t)=U(:,1:t)*inv(R)*W; W=Y(:,1:k-1); % 计算投影后的中心值 for i=1:k group=(Target==ClassLabel(i)); centers(i,:)=mean(Input(group,:)*W); end
    复制代码

      因为LDA是二类分类器,需要推广到多类的问题。常用的方法one-vs-all方法训练K个分类器(这个方法在综合时不知道怎么处理?),以及任意两个分类配对训练分离器最后得到k(k-1)/2个的二类分类器。本文采用训练后者对样本进行训练得到模型model。在代码中,model为数组struct。

    用于训练的函数LDATraining.m

    复制代码
    function [model,k,ClassLabel]=LDATraining(input,target) % input: n*d matrix,representing samples % target: n*1 matrix,class label % model: struct type(see codes below) % k: the total class number % ClassLabel: the class name of each class % model=struct; [n dim]=size(input); ClassLabel=unique(target); k=length(ClassLabel); t=1; for i=1:k-1 for j=i+1:k model(t).a=i; model(t).b=j; g1=(target==ClassLabel(i)); g2=(target==ClassLabel(j)); tmp1=input(g1,:); tmp2=input(g2,:); in=[tmp1;tmp2]; out=ones(size(in,1),1); out(1:size(tmp1,1))=0; % tmp3=target(g1); % tmp4=target(g2); % tmp3=repmat(tmp3,length(tmp3),1); % tmp4=repmat(tmp4,length(tmp4),1); % out=[tmp3;tmp4]; [w m]=LDA(in,out); model(t).W=w; model(t).means=m; t=t+1; end end
    复制代码

      在预测时,使用训练时生成的模型进行k(k-1)/2次预测,最后选择最多的分类作为预测结果。在处理二类分类器预测时,通过对预测样本作W的投影变换再比较与两个类的均值进行比较得到(不知道有没有更好的办法?)

    用于预测的函数LDATesting.m

    复制代码
    function target=LDATesting(input,k,model,ClassLabel) % input: n*d matrix,representing samples % target: n*1 matrix,class label % model: struct type(see codes below) % k: the total class number % ClassLabel: the class name of each class [n dim]=size(input); s=zeros(n,k); target=zeros(n,1); for j=1:k*(k-1)/2 a=model(j).a; b=model(j).b; w=model(j).W; m=model(j).means; for i=1:n sample=input(i,:); tmp=sample*w; if norm(tmp-m(1,:))<norm(tmp-m(2,:)) s(i,a)=s(i,a)+1; else s(i,b)=s(i,b)+1; end end end for i=1:n pos=1; maxV=0; for j=1:k if s(i,j)>maxV maxV=s(i,j); pos=j; end end target(i)=ClassLabel(pos); end
    复制代码

    示例代码为:

    function target=test(in,out,t) [model,k,ClassLabel]=LDATraining(in,out); target=LDATesting(t,k,model,ClassLabel);

      实验中对USPS数据集进行了测试,效果不怎么好,正确率才39%左右,而这个数据集使用KNN算法可以达到百分之百九十的正确率,汗!

    展开全文
  • function [Y,W,lambda]=LDA(X,L) %%X为数据集,L为标签 %%%第一步:初始化变量 classes = unique(L)'; %不同的类 k = numl(classes); %总共多少个类 n=zeros(k,1); %用来存储每个类的个数 C=cell{k,1}; %定义...
  • LDA算法matlab代码

    2013-07-19 10:16:43
    使用LDA(线性判别分析)算法提取一维数字信号(数组)的特征,可用于信号的分类识别。
  • 经典监督式学习降维方法线性判别分析LDA算法MATLAB代码,具有降维性能好的特点,同时可以用于分类,是一种具有代表性的降维算法
  • LDA算法(MATLAB实现)

    热门讨论 2012-11-06 16:02:33
    matlab写的LDA代码,比较好用!
  • 二维LDAmatlab代码

    2013-10-31 23:01:56
    2D-LDAmatlab代码 可运行,有一定的参考价值。可作为实验对比用,也可进一步修改算法
  • 可实现的LDA算法代码

    2014-11-14 10:09:13
    matlab代码LDA算法,自己写的,有数据mat,可以实现
  • matlab code for pattern recognition. 包含完整PCA NMF LDA GMM代码和使用说明
  • LDA算法实现

    2017-03-21 20:04:33
    一些关于LDA算法实现的例子,还有MATLAB代码实现
  • 1维的简单LDA和2维LDA人脸识别的matlab代码,注释详细,可以直接运行,非常好用,还有1维LDA算法讲解,很适合入门的同学!
  • matlab下实现LDA和PCA人脸特征提取算法和用最近令分类器分类,在标准人脸库上测试效果不错,有很高的识别率。本代码已经经过调试,直接能运行的。
  • LDA代码实现(Matlab版)

    热门讨论 2011-04-22 15:09:13
    这是我找到的一个用matlaB写的LDA算法代码实例
  • 线性判别式分析(Linear Discriminant Analysis, LDA)算法,利用MATLAB实现。附实例原始代码以及结果图
  • 人脸检测matlab代码程序,用到了PCA和LDA算法原理,亲测可用
  • Gabor+LDA人脸识别测试代码 Matlab

    热门讨论 2010-07-18 00:36:35
    代码针对的是FERET人脸库,在该库的FB,fc,dupI子集上...程序中包含了几何预处理、光照预处理、Gabor特征提取、Fisherface训练、识别、计算识别率等模块,可以很方便的对每个模块进行分别修改,适合用来比较算法的性能。
  • LDA资源文档+matlab,针对以C/C++为工具的童鞋,若你有matlab基础,matlab代码有助于LDA算法的理解,所以建议可以看一下,特别是原理理解遇到问题时,里面还有一篇算法分析很透彻的论文,有兴趣的可以阅读一下,有助...
  • PCA和LDA的OpenCV代码实现--预告

    千次阅读 2012-04-18 12:01:19
    LDA算法还有些问题,这一二个星期会给出所有核心代码。其实PCA、LDA等仅仅是一个工具,有了好工具,才能实现其他更多的更强大的功能。代码放出后,欢迎讨论和指正,貌似也没多少人看得到。。。  昨天突

                   关于PCA和LDA用在人脸识别等分类算法上的例子很多,但真正给出代码的,特别是简单易懂c++代码的,搜了几天几乎没发现。所以我只能自己仿照matlab的代码实现做成c++的。LDA算法还有些问题,这一二个星期会给出所有核心代码。其实PCA、LDA等仅仅是一个工具,有了好工具,才能实现其他更多的更强大的功能。代码放出后,欢迎讨论和指正,貌似也没多少人看得到。。。

                  昨天突然看到http://www.cvchina.info/2012/04/21/opencv2-4-beta-is-out/这篇文章,我打开自己的下载的OpenCV2.4.0beta下的文件夹F:\Softs\OpenCV2.4.0\opencv\modules\contrib\src,点开文件facerec.cpp和lda.cpp看了下,发现新的OpenCV自身集成了这几种简单的人脸识别算法。并且实现的十分完美,可读性也不错。所以我也不给出自己写的人脸识别算法了~我想,现在又可以有一堆毕业生运行下自带的人脸识别程序,顺利完成本科毕设了~

                 OpenCV越来越强大,强大到我五体投地。

    展开全文
  • 降维算法LDA用于分类

    2020-04-02 10:26:03
    本资源是机器学习常见方法LDA(线性判别分析)的源码,其主要功能类似于PCA,都属于降维算法。本次实现是依托于项目工程,裁剪掉了图像预处理特征提取部分,是降维算法在分类问题上的一次实现,为Matlab代码实现
  • 这是线性判别分析的一个matlab code,有具体实例的运行结果,还有关于LDA 算法的详细讲解,通俗易懂,希望对大家有用.
  • 详细说明:五组在matlab中应用的小程序:(1)carspls and carsplslda,竞争性自适应重加权算法(cars)筛选特征变量,并建立PLS定量或定性模型(2)mcuvepls 蒙特卡罗抽样无关信息消除后,建立PLS定量和定性模型(3)osc,...

    详细说明:五组在matlab中应用的小程序:(1)carspls and carsplslda,竞争性自适应重加权算法(cars)筛选特征变量,并建立PLS定量或定性模型(2)mcuvepls 蒙特卡罗抽样无关信息消除后,建立PLS定量和定性模型(3)osc,正交信号校正的多变量数据处理方法(4)plot cars-lda-mcs,表征cars-lda-mcs的结果(5)demo 对以上carspls and carsplslda,mcuvepls 方法在matlab中实现举例演示-Five groups codes in matlabapplication: (1) carspls and carsplslda, competitive adaptive re-weighted algorithm (cars) for characteristic variables selection, and the establishment of PLS ​ ​ quantitative or qualitative model (2) mcuvepls, Monte Carlo sampling and the uninformative variables elimination (UVE), and the establishment of quantitative and qualitative PLS model (3) Orthagnal signal correction(osc), multivariate data processing method (4) plot cars-lda-mcs, characterization results of cars-lda-mcs (5) the demo about carspls and carsplslda, mcuvepls method implementation in matlab

    展开全文
  • Linear Discriminant Analysis(LDA)

    千次阅读 2019-03-12 11:16:20
    好久没有整理最近的一些算法了,今天趁着跑数据的过程整理一下LDA算法。该算法在很多地方都有使用:语音识别,说话人识别等等,那么今天在这里就为大家详细介绍一下,最终把matlab代码放在我的git上,有兴趣的可以去...

    好久没有整理最近的一些算法了,今天趁着跑数据的过程整理一下LDA算法。该算法在很多地方都有使用:语音识别,说话人识别等等,那么今天在这里就为大家详细介绍一下,最终把matlab代码放在我的git上,有兴趣的可以去看一下,好了不多说,直接进入主题。

     

    首先介绍一下LDA到底是什么?LDA是一种降维的方法,一提到降维,大家应该很熟悉PCA。那么PCA和LDA的区别是什么呢?我们简单的理解可以理解为PCA是获取那些数据能量集中的子空间,用《模式分类》中的例子:手写字母识别中,Q和O利用PCA能够发现两个字母的相似之处,却很可能把区分字母Q和O的那撇特征去掉。而LDA却不同,它也是是获取一个子空间,在这个子空间中:同类的数据会集中,不同类的数据则分散开来,所以从这个角度来看LDA更适合于分类的任务。那么上面大家对LDA有了一个整体的了解,下面我开始讲解LDA,这里会参照《模式分类》这本书,不过会穿插我的理解,方便大家一步步跟进,那么我们开始。

     

    假设我们有n个d维度的样本:x1,x2,....xn,他们分别属于两个不同的类别,即其中大小为那n1的样本属于类别1,大小为n2 的样本属于类别2【假设我们只有两大类】.如果对x中的各个成分做线性组合,就会得到一个点积,结果就是一个标量:

    那么全部的n个样本x1,x2,....xn就产生n个结果y1,y2,....yn。这些结果不是属于类别1就是属于类别2。从几何上说,当||w||=1的时候,那么每个yi就是把xi向着方向w的直线进行投影的结果【为什么这么说,大家可以查一下投影矩阵,看他的公式和意义】。那么根据我们上面讲过的LDA的思想,我们希望w有着以下这种功效:我们希望x经过w的映射后形成两个显著分开的聚类【这句话意味着不同类分散开,同类聚集在一起】。当我们把此LDA用作分类的时候,其实也就是需要两步:1. 确定w 2. 确定一个阀值,当低于阀值属于类别1,当高于阀值属于类别2.

     

    那我们首先就来确定最佳的直线方向w,以达到最好的分类效果。以下是思路过程:

    【PS:请你们自动忽略字体,我用的是草体,这绝不是乱,嗯~】

    那么我们继续,把w变量引入:

    这其实是一个广义特征值分解的问题,使得J最大的w必须满足:

    我们左乘Sw^-1,得到:

     

    因为我们只有两类,所以没有必要把Sw^-1*SB的特征值真的分解,SB*W的总是位于m1-m2的方向上,w的模的大小我们并不关心,只关心其方向,所以:

    以上就是关于LDA在二分类情况下求解w的过程,关于阀值的判断我们不进行讨论。那么下面引入了新的问题:如何处理多分类的情况?

    最后我把我的实现放在我的git上,并不难,主要是一个公式转代码的思想,这个很重要:https://github.com/mahuichao/MatlabWorkSpace

    展开全文
  • 个人收集的人脸识别经典算法源码

    热门讨论 2012-09-20 16:52:01
    内含PCA 2DPCA LDA FDA NMFs算法matlab或C OPENGL源代码 ORL人脸库,调试好的人脸系统等
  • matlab开发-多耳原理成分分析PCA。这些代码实现了两种算法:多行主成分分析(MPCA)和MPCA LDA
  • 线性鉴别分析

    2012-01-03 15:49:36
    线性鉴别分析(lda)是作人脸识别非常经典的一个算法,这是一个matlab代码
  • linear discriminant analysis (LDA), Basic perceptron, Elastic Net, logistic regression, (Kernel) Support Vector Machines (SVM), Diagonal Linear Discriminant Analysis (DLDA), Golub Classifier, Parzen-...
  • 分享一些我上课的资料,里面包括4个实验,4个模型,都是基于matlab的最基础语法的模型,没有使用matlab的机器学习库,并不是面向使用,而是为了方便了解模型而已。实验中大部分的代码都已经写好的只需要再补充一部分...

空空如也

空空如也

1 2
收藏数 29
精华内容 11
关键字:

lda算法matlab代码

matlab 订阅