精华内容
下载资源
问答
  • 各位大神们,我最近用MATLAB实现LDA,但是它的输入数据模式是id:count,即输入的是每个词在文档中出现的次数,而我现在有个现成的文档-词语概率矩阵,把这个当作输入,程序运行不起来,因为手头的这个程序是在词频的...
  • MATLAB实现LDA线性判别分析

    千次阅读 2018-11-03 20:14:10
    代码如下 clear all;close all;clc; x=[0.697,0.774,0.634,0.608,0.556,0.403,0.481,0.437,0.666,0.243,0.245,0.343,0.639,0.657,0.360,0.593,0.719]; y=[0.460,0.376,0.264,0.318,0.215,0.237,0.149,0.211,0.091,0....

    代码如下

    clear all;close all;clc;
    x=[0.697,0.774,0.634,0.608,0.556,0.403,0.481,0.437,0.666,0.243,0.245,0.343,0.639,0.657,0.360,0.593,0.719];
    y=[0.460,0.376,0.264,0.318,0.215,0.237,0.149,0.211,0.091,0.267,0.057,0.099,0.161,0.198,0.370,0.042,0.103];
    z=[1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0];
    %data=[x;y;z]';
    data=[4,2,2,3,4,9,6,9,8,10
        2,4,3,6,4,10,8,5,7,8
        1,1,1,1,1,0,0,0,0,0]';
    [m,n]=size(data);
    for i=1:m
        if data(i,3)==1
            plot(data(i,1),data(i,2),'r.','MarkerSize', 12);hold on;
        end
        if data(i,3)==0
            plot(data(i,1),data(i,2),'b.','MarkerSize', 12);
        end
    end
    new_data=zeros(m,n-1);
    cen1=zeros(1,2);cen0=zeros(1,2);%定义类中心
    sum1=zeros(1,2);sum0=zeros(1,2);
    num1=0;num0=0;
    %计算类中心
    for i=1:m
        if data(i,3)==1
            sum1(1,1)=sum1(1,1)+data(i,1);
            sum1(1,2)=sum1(1,1)+data(i,2);
            num1=num1+1;
        end
        if data(i,3)==0
            sum0(1,1)=sum0(1,1)+data(i,1);
            sum0(1,2)=sum0(1,2)+data(i,2);
            num0=num0+1;
        end
    end
    cen0=sum0/num0;cen1=sum1/num1;
    %计算类内散度矩阵Sw
    Sw=zeros(2,2);
    for i=1:m
        if data(i,3)==1
            Sw=Sw+(data(i,[1 2])-cen1(1,:))'*(data(i,[1 2])-cen1(1,:));
        end
        if data(i,3)==0
            Sw=Sw+(data(i,[1 2])-cen0(1,:))'*(data(i,[1 2])-cen0(1,:));
        end
    end
    %计算类间散度矩阵Sb;
    Sb=(cen0-cen1)'*(cen0-cen1);
    [L,D]=eigs(Sw\Sb',1);%计算最大特征值和特征向量
    %显示投影线
    k=L(1)/L(2);
    b=0;
    xx=0:10;
    yy=k*xx;
    plot(xx,yy)
    %计算投影点并显示
    new_data(:,1)=(k*data(:,2)+data(:,1))/(k*k+1);
    new_data(:,2)=k*new_data(:,1);
    new_data(:,3)=data(:,3);
    for i=1:m
        if new_data(i,3)==1
            plot(new_data(i,1),new_data(i,2),'r+','MarkerSize', 5);
        end
        if new_data(i,3)==0
            plot(new_data(i,1),new_data(i,2),'b+','MarkerSize', 5);
        end
    end
    %axis([0 1 0 1])
    axis([0 15 0 15])
    hold on;
    

    下面是运行后的结果
    图像符合的还是可以的
    下面是用周志华西瓜书数据集进行的,效果没有上面的明显
    在这里插入图片描述
    还进行过二组平行直线的判别。结果没有很好符合。可能是选择特征向量时舍去的那部分导致的。

    展开全文
  • %LDA 线性判别分析,以两个类别数目为例 function [w,c] = myLDA(X,Y) %X-数据矩阵,Y-类标签 idx0 = find(Y==0);idx1 = find(Y==1); [n0 nn0]= size(idx0);[n1 nn1] = size(idx1); X0 = X(idx0,:);X1 = X(idx1,:); ...
    %LDA 线性判别分析,以两个类别数目为例
    function [w,c] = myLDA(X,Y) %X-数据矩阵,Y-类标签
    idx0 = find(Y==0);idx1 = find(Y==1);
    [n0 nn0]= size(idx0);[n1 nn1] = size(idx1);
    X0 = X(idx0,:);X1 = X(idx1,:);
    Sb = (X0'*ones(n0,1)/n0-X1'*ones(n1,1)/n1)*(X0'*ones(n0,1)/n0-X1'*ones(n1,1)/n1)';
    Sw = X0'*(eye(n0)-ones(n0)/n0)*X0+X1'*(eye(n1)-ones(n1)/n1)*X1;
    [w,c]=eig(Sb,Sw);
    
    展开全文
  • LDA算法对于两类问题的LDA(Matlab实现)1 function [ W] = FisherLDA(w1,w2)2 %W最大特征值对应的特征向量3 %w1 第一类样本4 %w2 第二类样本56 %第一步:计算样本均值向量7 m1=mean(w1);%第一类样本均值8 m2=mean(w2)...

    LDA算法

    对于两类问题的LDA(Matlab实现)

    1 function [ W] = FisherLDA(w1,w2)2 %W最大特征值对应的特征向量3 %w1 第一类样本4 %w2 第二类样本5

    6 %第一步:计算样本均值向量7 m1=mean(w1);%第一类样本均值8 m2=mean(w2);%第二类样本均值9 m=mean([w1;w2]);%总样本均值10

    11 %第二步:计算类内离散度矩阵Sw12 n1=size(w1,1);%第一类样本数13 n2=size(w2,1);%第二类样本数14 %求第一类样本的散列矩阵s115 s1=0;16 for i=1:n117 s1=s1+(w1(i,:)-m1)‘*(w1(i,:)-m1);18 end19 %求第二类样本的散列矩阵s220 s2=0;21 for i=1:n222 s2=s2+(w2(i,:)-m2)‘*(w2(i,:)-m2);23 end24 Sw=(n1*s1+n2*s2)/(n1+n2);25 %第三步:计算类间离散度矩阵Sb26 Sb=(n1*(m-m1)‘*(m-m1)+n2*(m-m2)‘*(m-m2))/(n1+n2);27 %第四步:求最大特征值和特征向量28 %[V,D]=eig(inv(Sw)*Sb);%特征向量V,特征值D29 A = repmat(0.1,[1,size(Sw,1)]);30 B = diag(A);31 [V,D]=eig(inv(Sw + B)*Sb);32 [a,b]=max(max(D));33 W=V(:,b);%最大特征值对应的特征向量34 end

    测试:

    cls1_data=[2.95 6.63;2.53 7.79;3.57 5.65;3.16 5.47];

    cls2_data=[2.58 4.46;2.16 6.22;3.27 3.52];

    %样本投影前

    plot(cls1_data(:,1),cls1_data(:,2),‘.r‘);

    hold on;

    plot(cls2_data(:,1),cls2_data(:,2),‘*b‘);

    hold on;

    W=FisherLDA(cls1_data,cls2_data);

    %样本投影后

    new1=cls1_data*W;

    new2=cls2_data*W;

    k=W(2)/W(1);

    plot([0,6],[0,6*k],‘-k‘);

    axis([2 6 0 11]);

    hold on;

    %画出样本投影到子空间点

    for i=1:4

    temp=cls1_data(i,:);

    newx=(temp(1)+k*temp(2))/(k*k+1);

    newy=k*newx;

    plot(newx,newy,‘*r‘);

    end;

    for i=1:3

    temp=cls2_data(i,:);

    newx=(temp(1)+k*temp(2))/(k*k+1);

    newy=k*newx;

    plot(newx,newy,‘ob‘);

    end;

    结果:

    af58687fe17cc4471b571c9b2c6644bd.png

    原文:http://www.cnblogs.com/simon-c/p/4961942.html

    展开全文
  • 我从网上Download下来lda-0.2-matlab,想把里面的train文件替换成自己的数据,有什么办法?
  • LDAmatlab实现

    热门讨论 2012-07-16 14:30:19
    LDA( Linear Discriminant Analysis),很不错
  • LDAmatlab实现

    2013-03-15 16:32:10
    用于铜浮选工况识别的,多类训练集的线性判别分析源代码(matlab
  • LDA算法(MATLAB实现)

    热门讨论 2012-11-06 16:02:33
    matlab写的LDA代码,比较好用!
  • matlab LDA linear dicriminant analysis 实现

    千次阅读 2015-12-24 11:34:48
    所以只管结果正确,不太追究具体的原理,在网上找到了一些别人的实现以及参考资料,自己实现了以下,但和OpenCV里面的LDA[1]结果相差较大,后来经过参考多个版本以及理论知识,最终实现版本如下,与OpenCV的LDA结果...

    LDA 中文名称线性判别分析

    最近用到LDA,因为不是数学方面出生,所以只管结果正确,不太追究具体的原理,在网上找到了一些别人的实现以及参考资料,自己实现了以下,但和OpenCV里面的LDA[1]结果相差较大,后来经过参考多个版本以及理论知识,最终实现版本如下,与OpenCV的LDA结果一致且与LDA的公式相符:

    function [coeff, latent]= myLDA(data, labels)
    % Make sure labels are nice
    	[classes, bar, labels] = unique(labels);
        nc = length(classes);
        
        dataMean = mean(data, 1);
        Sb = 0;%类间
        for i = 1:nc
             cur_X = data(labels == i,:);
             meanTemp = mean(cur_X, 1);
             Sb = Sb + size(cur_X,1)*(meanTemp'-dataMean')*(meanTemp'-dataMean')';
        end
        
        Sw = 0;%类内
        for i = 1:nc
            cur_X = data(labels == i,:);
             meanTemp = mean(cur_X, 1);
            for j = 1:size(cur_X,1)
                dataTemp = cur_X(j, :);
                Sw =  Sw + (meanTemp' - dataTemp')*(meanTemp' - dataTemp')';
            end
        end
        Sb(isnan(Sb)) = 0; Sw(isnan(Sw)) = 0;
    	Sb(isinf(Sb)) = 0; Sw(isinf(Sw)) = 0;
       
        [coeff, latent] = eig(Sw\Sb);
         % Sort eigenvalues and eigenvectors in descending order
        latent(isnan(latent)) = 0;
        [latent, ind] = sort(diag(latent), 'descend');
        [classes, ~, ~] = unique(labels);
        no_dims = length(classes) - 1;
        coeff = coeff(:,ind(1:min([no_dims size(coeff, 2)])));
    end

    测试数据1

    data1 =
    
        2.9500    6.6300
        2.5300    7.7900
        3.5700    5.6500
        3.1600    5.4700<pre name="code" class="html">    2.5800    4.4600
        2.1600    6.2200
        3.2700    3.5200
    </pre><pre name="code" class="html"><pre name="code" class="html">label1 =
         
         0
         0
         0
         0
         1
         1
         1

    
    
    
    
    结果如下:[因为LDA主要用特征向量,故此处只给出特征向量的结果,特征值在不同的实现当中会各有不同]

    coeff =
    
       -0.9231
       -0.3846

    测试数据2

    data2 =
    
         0     1
         0     2
         2     4
         8     0
         8     2
         9     4<pre name="code" class="html">label2 =
    
         0
         0
         0
         1
         1
         1

    
    结果如下:
    

    coeff =
    
        0.9204
       -0.3909


    另外在matlab里面有一个专门做数据降维的工具箱drtoobox,里面有实现LDA,但感觉它的计算结果不是我想要的那种,但如果修改了当中的一些代码,计算结果就会与我的一致,主要是最后计算特征值和特征向量,在drtoolbox当中为:

    [M, lambda] = eig(Sb, Sw);
    改成以下则特征向量与我的一致:

    [M, lambda] = eig(Sw\Sb);
    理论上两种计算应该都可以,但根据LDA的具体公式[3],个人更倾向于第二种方式。

    另外由于matlab当中目前实现了PCA,会与drtoolbox当中的pca函数名冲突,在使用这个toolbox的时候需要修改其函数名,并修改compute_mapping里面用到pca函数的地方。

    此处给出drtoolbox的介绍和官网:

    [1]  数据降维工具箱drtoolbox

    [2] 官网: Matlab Toolbox for Dimensionality Reduction


    参考文章:

    [1] OpenCV LDA(Linnear Discriminant analysis)类的使用---OpenCV LDA示例

    [2] 线性判别分析(Linear Discriminant Analysis, LDA)算法分析

    [3] 《模式分类》 机械工业出版社P96 - P101

    展开全文
  • LDA算法原理及matlab实现

    万次阅读 多人点赞 2016-11-09 19:37:05
    注:本文非笔者原创,原文转载自... 1. LDA是什么 线性判别式分析(Linear Discriminant Analysis),简称为LDA。也称为Fisher线性判别(Fisher Linear Discriminant,FLD),是模式识别的经典算法,在1996年由Be
  • LDA matlab

    2014-09-23 18:30:13
    matlab编写程序,最终实现LDA分析,获得相应数据的结果。
  • 对于两类问题的LDAMatlab实现) 1 function [ W] = FisherLDA(w1,w2) 2 %W最大特征值对应的特征向量 3 %w1 第一类样本 4 %w2 第二类样本 5 6 %第一步:计算样本均值向量 7 m1=mean(w1);%第一类...
  • 线性判别式分析(Linear Discriminant Analysis, LDA)算法,利用MATLAB实现。附实例原始代码以及结果图
  • FISHER(LDA)原理及MATLAB实现

    千次阅读 2020-04-03 10:26:17
    FISHER算法,又称LDA算法,是无监督硬分类算法,解决二分类问题。 算法步骤如下: 样本均值向量 样本类内离散矩阵 总类内离散度矩阵 求最佳向量 计算阈值,其中 MATLAB程序如下: close all;clear all;clc; %...
  • 3.1 二类LDA算法 1.二类LDA原理 \quad \quadLDA(Linear Discriminant Analysis)是是一种监督学习的降维技术,LDA的思想可以用一句话概括,就是“投影后类内方差最小,类间方差最大”,即分类依据是方差。 \quad \...
  • LDA算法-matlab代码实现

    万次阅读 2014-10-17 16:21:16
    本文使用LDA作为分类器在matlab下做实验。  其中投影转换矩阵W按照LDA的经典理论生成,如下的LDA函数,并返回各个类的投影后的(k-1)维的类均值。 LDA.m代码如下: function [W,centers]=LDA...
  • 线性判别分析(LDA)及其在R中实现线性判别分析(Linear Discriminant Analysis,LDA)是一种用于数据降维以及分类预测的机器学习方法,由RA Fisher(1936)提出,也称为Fisher判别式。最初的LDA只能处理两种分类问题,Rao...
  • 21ic下载_经典的LDA特征选择算法,用matlab实现,包括数据集
  • LDA代码实现Matlab版)

    热门讨论 2011-04-22 15:09:13
    这是我找到的一个用matlaB写的LDA算法的代码实例
  • 今天小编大家分享一篇Python实现线性判别分析(LDA)的MATLAB方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 本文约2500字,含数学公式较多,预计阅读时间15分钟,阅读难度中等...全文分成如下四个部分:PCA 回顾线性判别分析(LDA)多类别的线性判别分析使用LDA的限制一 PCA回顾介绍LDA之前,简单的回顾一下之前讲到的PCA。PCA...
  • lda-MATLAB

    2013-03-19 09:44:37
    blei提出的潜在狄利克雷算法的MATLAB实现
  • 综述线性判别分析 (LDA)是对费舍尔的线性鉴别方法(FLD)的归纳,属于监督学习的方法。LDA使用统计学,模式识别和机器学习方法,试图找到两类物体或事件的特征的一个线性组合,以能够特征化或区分它们。所得的组合可...
  • 其目标是向最大化类间差异,最小化类内差异的方向投影3.LDA算法实现大致有六步:标准化数据集,均值化每个类别向量,计算类内散度矩阵和类间散度矩阵,构造S矩阵求解特征根与特征向量,组合W矩阵,计算降维数据集...
  • LDA算法实现

    2017-03-21 20:04:33
    一些关于LDA算法实现的例子,还有MATLAB的代码实现
  • 线性判别分析(LDA)的MATLAB和Python实现

    万次阅读 多人点赞 2018-05-09 21:50:01
    线性判别分析(linear discriminant analysis),LDA。也称为Fisher线性判别(FLD)是模式识别的经典算法。(1)中心思想:将高维的样本投影到最佳鉴别矢量空间,来达到抽取分类信息和压缩特种空间维数的效果,投影...
  • 实现LDA算法代码

    2014-11-14 10:09:13
    matlab代码,LDA算法,自己写的,有数据mat,可以实现

空空如也

空空如也

1 2 3 4
收藏数 65
精华内容 26
关键字:

matlab实现lda

matlab 订阅