精华内容
下载资源
问答
  • fisher线性判别 matlab

    2015-08-14 22:58:06
    fisher线性判别matlab程序,可以输出判别得分、训练得到的判别矩阵等
  • Fisher线性判别实验,.m文件,各行代码功能备注明确,有利于学习,matlab直接运行,数据更改即可用于其他类别实验分析。
  • 利用Fisher线性判别来进行男女分类,用MATLAB实现代码,其中包含数据与文档说明! 利用Fisher线性判别来进行男女分类,用MATLAB实现代码,其中包含数据与文档说明!
  • FISHER线性判别MATLAB实现.pdf
  • fisher 线性判别分析matlab实现

    热门讨论 2012-06-07 15:53:36
    fisher线性判别分析建立P300分类模型。特征提取用PCA。
  • Fisher判别matlab实现

    2018-12-08 12:45:55
    Fisher线性判别Fisher Linear Discrimination,FLD),也称线性判别式分析(Linear Discriminant Analysis, LDA)。FLD是基于样本类别进行整体特征提取的有效方法。它在使用PCA方法进行降维的基础上考虑到训练样本的...
  • Fisher线性判别分类器 本实验旨在让同学进一步了解分类器的设计概念,理解并掌握用Fisher准则函数确定线性决策面方法的原理及方法,并用于实际的数据分类。
  • 一、 参数 1.题设三个类,每个类均有10个样本,分别为w1,w2,w3,因此采用两两互相分类,最后得出结果; 2.三类样本的均值向量依次为m1,m2,m3; 3.三类样本的类内离散度矩阵依次为S1,S2,S3;...

    一、 参数

    1.题设三个类,每个类均有10个样本,分别为w1,w2,w3,因此采用两两互相分类,最后得出结果;

    2.三类样本的均值向量依次为m1,m2,m3;

    3.三类样本的类内离散度矩阵依次为S1,S2,S3;

    4.对于w1和w2,总类内离散度矩阵为Sw12,类间离散度矩阵为Sb12,通过矩阵特征分解求得的投影方向为wr1_12,通过公式直接求得的投影方向为wr2_12;对于w1和w3、w2和w3,则是以此类推。

    二、 实验结果

    1.对w1和w2进行分类

    通过矩阵特征分解求得的投影方向为
    wr1_12 = (-0.8617 0.4965 -0.1046)

    通过公式直接求得的投影方向为
    wr2_12 = (-0.8303 0.4784 -0.1008)
    在这里插入图片描述
    图1 对w1和w2分类示意图

    2.对w1和w3进行分类

    通过矩阵特征分解求得的投影方向为
    wr1_13 = (-0.0366 0.9494 -0.3118)

    通过公式直接求得的投

    展开全文
  • 针对我博客《线性分类器之Fisher线性判别-MATLAB实现》的数据集,为了方便大家使用代码特提交到这上面,供大家下载和使用
  • 线性分类器之Fisher线性判别-MATLAB实现

    千次阅读 热门讨论 2018-11-16 21:07:01
    在许多实际问题中,由于样本特征空间的类条件密度函数常常很难确定,利用Parzen窗等非参数方法估计分布往往需要大量样本,而且随着特征...这种方法称为判别函数法,并且根据其中判别函数的形式,可分为线性分类器和...

           在许多实际问题中,由于样本特征空间的类条件密度函数常常很难确定,利用Parzen窗等非参数方法估计分布往往需要大量样本,而且随着特征空间维数的增加所需样本数急剧增加,因此在实际问题中,往往不去求类条件概率密度函数,而是利用样本集直接设计分类器。具体说就是首先给定某个判别函数,然后利用样本集确定判别函数中的未知参数。这种方法称为判别函数法,并且根据其中判别函数的形式,可分为线性分类器和非线性分类器。线性分类器较为简单,在计算机上容易实现,在模式识别中应用非常广泛。在此讨论线性分类器中的Fisher线性判别,应用统计方法解决很多实际问题的时候,经常会遇到维数问题。在低维空间里解析上或者计算上可行的方法,在高维空间里往往行不通,因此降低维数有时就成为处理实际问题的关键。

           可以考虑把d维空间的样本投影到一直线上,形成一维空间,即把维数压缩到一维,这在数学上总很容易办到。然而即使样本在d维空间里形成若干紧凑的互相分得开的集群,若把它投射到任意的一条直线上,也可能使几类样本混在一起而变得无法识别。但在一般情况下,总可以找到某个方向,使在这个方向的直线上,样本的投影能分开的很好。问题是如何根据实际情况来找到这条最好的、最易于分类的投影线。这就是Fisher线性判别所需要解决的基本问题。

           对于两类问题的Fisher线性判别的具体方法如下:

    • 计算各类样本均值向量m_{i},N_{i}\omega _{i}类的样本个数。

                                                                                    m_{i}= \frac{1}{N^{_{i}}}\sum_{X\epsilon \omega _{i}}^{ }X, i=1,2

    • 计算样本类内离散度矩阵S_{i}和总类内离散度矩阵S_{w}

                                                                        S{_{i}}=\sum_{X\epsilon \omega _{I}}^{ }\left ( X-m{_{i}} \right )\left ( X-m{_{i}} \right )^{T}, i= 1,2

                                                                                            S_{w}= S_{1}+S_{2}

    • 计算样本类间离散度矩阵S_{b}.

                                                                                 S{_{b}}=\left ( m{_{1}}-m{_{2}} \right )\left ( m{_{1}}-m{_{2}} \right )^{T}

    • 求向量w^{\ast }。为此定义Fisher准则函数

                                                                                         J_{F}\left ( w \right )=\frac{w^{T}S_{b}w}{w^{T}S_{w}w}

    使得J_{F}\left ( w \right )取得最大值的w^{\ast }

                                                                                      w^{\ast }=S_{w}^{-1}\left ( m{_{1}}-m{_{2}} \right )

    • 将训练数据集所有样本进行投影。

                                                                                            y= \left ( w^{^{\ast }} \right )^{T}X

    • 计算在投影空间上的分隔阈值y_{0}。阈值的选取可以有不同的方案,较常用的一种为

                                                                                     y_{0}= \frac{N_{1}\widetilde{m_{1}}+N_{2}\widetilde{m_{2}}}{N_{1}+N_{2}}

    另一种为

                                                                        y_{0}= \frac{\widetilde{m_{1}}+\widetilde{m_{2}}}{2}+ \frac{ln\left [ P\left ( w_{1} \right ) /P\left ( w_{2} \right )\right ]}{N_{1}+N_{2}-2}

    其中,\widetilde{m_{i}}为在一维空间中各类样本的均值:

                                                                                           \widetilde{m_{i}}= \frac{1}{N_{i}}\sum_{y\epsilon \omega _{i}}^{ }y.

    样本类内离散度\widetilde{s_{i}^{2}}和总类内离散度为\widetilde{s_{w}}

                                                                                          \widetilde{s_{i}^{2}}\sum_{y\epsilon \omega _{i}}^{ }\left (y- \widetilde{m_{i}}\right ),i=1,2

                                                                                                     \widetilde{s_{w}}=\widetilde{s_{1}^{2}}+\widetilde{s_{2}^{2}}      

    • 对于给定的X,计算它在w^{\ast }上的投影点y。

                                                                                                       y= \left ( w^{^{\ast }} \right )^{T}X          

    • 根据决策规则分类,有

                                                                                                    \left\{\begin{matrix} y> y{_{0}}\Rightarrow X\epsilon w_{1}\\ y< y{_{0}}\Rightarrow X\epsilon w_{2} \end{matrix}\right.         

    Fisher线性判别解决多类问题时,首先实现两类Fisher分类,然后根据返回的类型与新的类别再做两类Fisher分类,又能够得到比较接近的类别,以此类推,直至所有的类别,最后得出未知样本的类别。

    数据集:

                               

    数据集共有10000条数据,分为56维自变量,第57维为标记,两类分别为1和2。

    代码:

    clc
    clear
    close all
    data=load('训练数据.mat');
    type1=data.data(1:5000,1:56);
    type2=data.data(5001:10000,1:56);
    %类的均值向量
    m1=mean(type1);
    m2=mean(type2);
    %各类内离散度矩阵
    s1=zeros(56);
    s2=zeros(56);
    for i=1:1:4000
        s1=s1+(type1(i,:)-m1)'*(type1(i,:)-m1);
    end
    for i=1:1:4000
        s2=s2+(type2(i,:)-m2)'*(type2(i,:)-m2);
    end
    %总类内离散矩阵
    sw=s1+s2;
    %投影方向
    w=((sw^-1)*(m1-m2)')';
    %判别函数以及阈值T
    T=-0.5*(m1+m2)*inv(sw)*(m1-m2)';
    
    kind1=0;
    kind2=0;
    newtype1=[];
    newtype2=[];
    for i=4001:5000
        x=type1(i,:)
        g=w*x'+T;
        if g>0
            newtype1=[newtype1;x];
            kind1=kind1+1;
        else
            newtype2=[newtype2;x];
        end
    end
    for i=4001:5000
        x=type2(i,:)
        g=w*x'+T;
        if g>0
            newtype1=[newtype1;x];        
        else
            newtype2=[newtype2;x];
            kind2=kind2+1;
        end
    end
    correct=(kind1+kind2)/2000;
    fprintf('\n综合正确率:%.2f%%\n\n',correct*100);

    数据下载地址:https://download.csdn.net/download/WCFDATAGRID/13108207

    运行结果:综合正确率:50.85%。

     理论知识参考许国根的《模式识别与智能计算的MATLAB实现》。可能代码不够完美,欢迎大家积极探讨,共同进步!

    展开全文
  • Fisher线性判别算法原理及实现 MATLAB

    千次阅读 2021-05-27 01:03:44
    Fisher判别器算法原理及实现 MATLAB 一、Fisher判别器原理 二、代码实现 三、实验结果

    Fisher线性判别算法原理及实现 MATLAB

    一、Fisher判别器原理

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    二、代码实现

    clc;
    close all;
    clear;
    %% 生成数据
    rng(2020);   %指定一个种子
    mu1 = [0 3];
    sigma1 = [0.5 0; 
             0 0.5];
    data1 = mvnrnd(mu1,sigma1,300); %生成一个300*2的矩阵,每一列的数据分别以03为均值,标准差都为0.5
    
    rng(2021);  %指定一个种子
    mu2 = [6 7];
    sigma2 = [0.5 0; 
             0 0.5];
    data2 = mvnrnd(mu2,sigma2,300); %生成一个300*2的矩阵,每一列的数据分别以67为均值,标准差都为0.5
    
    % rng(2022);  %指定一个种子
    % mu3 = [5 -5];
    % sigma3 = [0.5 0; 
    %          0 0.5];
    % data3 = mvnrnd(mu3,sigma3,300); %生成一个300*2的矩阵,每一列的数据分别以5-5为均值,标准差都为0.5
    
    %% 
    figure(1),plot(data1(:,1),data1(:,2),'r+');hold on;
    plot(data2(:,1),data2(:,2),'b*');hold on;
    % figure(3),plot(data3(:,1),data3(:,2),'m^');hold on;
    
    %%
    mu_1=mean(data1,1);  %求data1数据集的均值 mean是求每一列的均值
    mu_2=mean(data2,1);  %求data2数据集的均值 mean是求每一列的均值
    tmp=data1-repmat(mu_1,[size(data1,1),1]); %size(data1,1)返回data1第一维的大小 repmat将mu_1矩阵当成一个数,然后按后面的向量排列
    S1=tmp'*tmp;   %计算出S1 下面的操作是一样的
    tmp=data2-repmat(mu_2,[size(data2,1),1]);
    S2=tmp'*tmp;
    Sw=S1+S2;
    w_star=Sw\(mu_1-mu_2)';  %这边直接用结论 注意这里的mu_1 mu_2是行向量,而PPT上的为列向量,所以多了个转置,实际上是一样的
    
    %% Plot w_star
    Data=[data1;data2]; %将两个数据集合并成一个数据集
    [xmin,ymin]=min(Data,[],1); %返回每一列的最小值
    [xmax,ymax]=max(Data,[],1); %返回每一列的最大值
    X=xmin:0.1:xmax; %采样
    k=w_star(2)/(w_star(1)+eps);%求出判别函数的斜率
    plot(X,k*X-4,'k--'); %画出判别函数,-4只是上下平移,并不会影响到判别函数的方向,这里只是为了不让它穿过样本
    
    %%
    w_star=-w_star;  %反向
    y1=data1*w_star; %计算data1中每一个样本的投影
    y2=data2*w_star; %计算data2中每一个样本的投影
    figure(2),plot(y1,zeros(length(y1)),'r+');hold on;
    plot(y2,zeros(length(y2)),'b*');hold on; %横坐标是它们的投影,纵坐标取零是便于在一维中比较,可以发现两类样本分开了
    
    %% Sw-1Sb特征值分解
    Sb=(mu_1-mu_2)'*(mu_1-mu_2); %注意这里的mu_1 mu_2是行向量,而PPT上的为列向量,所以多了个转置,实际上是一样的
    Tmp=Sw\Sb; % Jf矩阵
    [V,D]=eig(Tmp); %V储存特征向量,D储存特征值,D是个对角阵,特征值储存在对角线上
    D=diag(D); %提取出特征值行向量
    [~,ind]=max(D);%最大特征值的序号
    v=V(:,ind); %提取出与最大特征值对应的特征向量
    k1=v(2)/(v(1)+eps);
    figure(3),plot(data1(:,1),data1(:,2),'r+');hold on;
    plot(data2(:,1),data2(:,2),'b*');hold on;
    plot(X,k*X-4,'k--');hold on;
    plot(X,k1*X-6,'m--'); %可以发现与第一种方法得到的结果是一样的
    
    %% G(x)=w'x+w0
    mu_y1=mean(y1); %计算data1数据投影的平均值
    mu_y2=mean(y2); %计算data2数据投影的平均值
    d=(mu_y1+mu_y2)/2; %d就是阈值
    w0=-d;
    figure(4),plot(data1(:,1),data1(:,2),'r+');hold on;
    plot(data2(:,1),data2(:,2),'b*');hold on;
    plot(X,k*X-4,'k--');hold on;
    Y=(-w_star(1)*X-w0)/(w_star(2));%G(x)=0解出y即可 注意x向量的第一个元素是横坐标,第二个元素是纵坐标
    plot(X,Y,'m-');
    axis equal;
    

    三、实验结果

    Figure 1:
    在这里插入图片描述

    Figure 2:
    在这里插入图片描述
    Figure 3:
    在这里插入图片描述
    Figure 4:
    在这里插入图片描述

    展开全文
  • Fisher线性判别式分析

    2019-07-17 11:47:25
    Fisher线性判别式分析,Matlab程序对Iris数据进行分类,经过十次交叉验证计算准确率
  • Fisher线性判断之matlab实现

    千次阅读 2019-11-24 13:24:24
    关于先行判断和Fisher变换的理论知识,这里推荐一个非常好的博客:...但这种方式只适用于线性可分,对于线性不可分,可以考虑用最小均方误差法。话不多说,下面看实现代码: %% fis...

    关于先行判断和Fisher变换的理论知识,这里推荐一个非常好的博客:https://blog.csdn.net/eternity1118_/article/details/51248471

    在了解了理论后,知道只要求出w与w0就可以,而且已经可以根据公式求出,所以实现起来也比较简单。但这种方式只适用于线性可分,对于线性不可分,可以考虑用最小均方误差法。话不多说,下面看实现代码:

    %% fisher线性判断
    clc;clear all;
    x1 = [  0.2331    1.5207    0.6499    0.7757    1.0524    1.1974
            0.2908    0.2518    0.6682    0.5622    0.9023    0.1333
           -0.5431    0.9407   -0.2126    0.0507   -0.0810    0.7315
            0.3345    1.0650   -0.0247    0.1043    0.3122    0.6655
            0.5838    1.1653    1.2653    0.8137   -0.3399    0.5152
            0.7226   -0.2015    0.4070   -0.1717   -1.0573   -0.2099
         ];
    y1 = [ 2.3385    2.1946    1.6730    1.6365    1.7844    2.0155
        2.0681    2.1213    2.4797    1.5118    1.9692    1.8340
        1.8704    2.2948    1.7714    2.3939    1.5648    1.9329
        2.2027    2.4568    1.7523    1.6991    2.4883    1.7259
        2.0466    2.0226    2.3757    1.7987    2.0828    2.0798
        1.9449    2.3801    2.2373    2.1614    1.9235    2.2604
      ];
    z1 = [  0.5338    0.8514    1.0831    0.4164    1.1176    0.5536
          0.6071    0.4439    0.4928    0.5901    1.0927    1.0756
          1.0072    0.4272    0.4353    0.9869    0.4841    1.0992
          1.0299    0.7127    1.0124    0.4576    0.8544    1.1275
          0.7705    0.4129    1.0085    0.7676    0.8418    0.8784
          0.9751    0.7840    0.4158    1.0315    0.7533    0.9548
       ];
     x2 =[  1.4010    1.2301    2.0814    1.1655    1.3740    1.1829
            1.7632    1.9739    2.4152    2.5890    2.8472    1.9539
            1.2500    1.2864    1.2614    2.0071    2.1831    1.7909
            1.3322    1.1466    1.7087    1.5920    2.9353    1.4664
            2.9313    1.8349    1.8340    2.5096    2.7198    2.3148
            2.0353    2.6030    1.2327    2.1465    1.5673    2.9414
          ];
    y2 = [  1.0298    0.9611    0.9154    1.4901    0.8200    0.9399
            1.1405    1.0678    0.8050    1.2889    1.4601    1.4334
            0.7091    1.2942    1.3744    0.9387    1.2266    1.1833
            0.8798    0.5592    0.5150    0.9983    0.9120    0.7126
            1.2833    1.1029    1.2680    0.7140    1.2446    1.3392
            1.1808    0.5503    1.4708    1.1435    0.7679    1.1288
        ];
    z2 = [  0.6210    1.3656    0.5498    0.6708    0.8932    1.4342
            0.9508    0.7324    0.5784    1.4943    1.0915    0.7644
            1.2159    1.3049    1.1408    0.9398    0.6197    0.6603
            1.3928    1.4084    0.6909    0.8400    0.5381    1.3729
            0.7731    0.7319    1.3439    0.8142    0.9586    0.7379
            0.7548    0.7393    0.6739    0.8651    1.3699    1.1458
    ];
       
    x1_w1  = zeros(3,36);x2_w2 = zeros(3,36);
    for i =1:36
       x1_w1(:,i) = [x1(i),y1(i),z1(i)];
       x2_w2(:,i) = [x2(i),y2(i),z2(i)];
    end
    %求均值
    m1 = mean(x1_w1');m1 =m1';
    m2 = mean(x2_w2');m2 =m2'; 
    %S1_x1 =zeros(3,3);    S2_x2 = zeros(3,3);
    %求类内离散度矩阵
    %S1_x1 = cov(x1_w1')*35;S2_x2 = cov(x2_w2')*35;
    %S = S1_x1 + S2_x2;% 总的离散度矩阵 越小越好
    S =zeros(3,3);
    for i = 1:2
        for j = 1:36
             S = S+(x1_w1(:,j)-m1)*(x1_w1(:,j)-m1)';
        end
    end
    %计算类间离散度,越大越好
    Sb = (m1-m2)*(m1-m2)';
    w = S^(-1)*(m1-m2);
    m1_w = w'*m1;
    m2_w = w'*m2;
    w0 = -(m1_w+m2_w)/2;
    test = [1,1.5,0.6;1.2,1.0,0.55;2.0,0.9,0.68;1.2,1.5,0.89;0.23,2.33,1.43];
    test = test';
    for i =1:5
        if(w'*test(:,i)>-w0 )
            fprintf('第%d个样本属于第1类\n',i);
        else
            fprintf('第%d个样本属于第2类\n',i);
        end
    end
    plot3(x1,y1,z1,'b.');hold on;plot3(x2,y2,z2,'r.');
    for i =1:5
        j =3*(i-1);
         plot3(test(j+1),test(j+2),test(j+3),'k*');
         hold on;
    end
    [x,y] = meshgrid( -2:0.1:3 ,0.5:0.1:2.5 );
    z = -(w(1)*x+w(2)*y+w0)/w(3);
    mesh(x,y,z);

    对于类内离散度矩阵也可以用cov函数,然后乘n-1,其中n为样本的个数。其公式为:

    散度矩阵=类内离散度矩阵=类内离差阵=协方差矩阵×(n-1),其中代码中是用定义求的。

    其运行结果显示:

    下图是没有插入分类面的结果,其中,黑色的星代表待分类的样本。

    插入分类面:

     

    展开全文
  • Fisher线性判别在理解Fisher线性分类的参考代码基础上(matlab代码),改用python代码完成Fisher判别的推导。重点理解“群内离散度”(样本类内离散矩阵)、“群间离散度”(总类内离散矩阵)的概念和几何意义。1、...
  • 线性判别式分析(Linear Discriminant Analysis, LDA)算法,利用MATLAB实现。附实例原始代码以及结果图
  • MATLABFisher线性判别iris数据集
  • fisher线性判别实现

    2018-01-10 15:56:55
    模式识别中的fisher线性判别器的基于matlab平台的实现
  • 该程序使用 FLD(Fisher 线性判别法)从人脸数据库中识别人脸。 使用Fisherface方法的图像识别是基于使用主成分分析(PCA)方法缩小人脸区域大小,然后称为Fisher线性判别分析(FDL)方法或线性判别分析(LDA)方法...
  • Fisher线性判别是线性分类算法中最基本的一种算法,其基本思想是将d维空间中的样本
  • } Fisher线性判别步骤: x1 = importdata('x1.txt'); x2 = importdata('x2.txt'); x = importdata('x.txt'); m1 = mean(x1); m2 = mean(x2); len1 = length(x1); len2 = length(x2); n = 4; S1 = 0; S2 = 0; for i ...
  • fisher判别matlab演示

    2020-05-16 23:59:51
    close all;clear all;clc n0=600; n1=400; labels = [zeros(n0,1);ones(n1,1)]; f0=[normrnd(0,1,n0,1),normrnd(1,1,n0,1)]; f1=[normrnd(5,1,n1,1),normrnd(4,1,n1,1)]; %% get projection w ...mu1=m...
  • 模式识别利用MATLABFisher线性判别分类法的编写。
  • Fisher线性判别_matlab_源码.zip
  • fisher线性判别分类器的设计实验源码
  • Fisher二元线性判别 Matlab源码

    热门讨论 2012-12-20 12:53:26
    朴素的Fisher二元线性分类器,相关理论参考清华版《模式识别(第二版)》P88-P90页(4.2章 Fisher线性判别)。 开发平台为Matlab7.7,内附详细的参数说明和源码注释,测试有效。 请注意:源码中所有的样本数据均以列...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 702
精华内容 280
关键字:

fisher线性判别matlab

matlab 订阅