Fisher线性判别分析

文章目录

  • 一、问题举例
  • 二、解决方法
    • 1、Fisher线性判别分析(LDA)
    • 2、算法描述
      • 1)留一法
      • 2)Iris数据集
      • 3)Sonar 数据集
  • 三、仿真结果
    • 1、Iris数据集
    • 2、Sonar 数据集
  • 四、代码

一、问题举例

    在UCI数据集上的Iris和Sonar数据上验证算法的有效性:
    Iris数据3类,4维,150个数据;Sonar数据2类,60维,208个样本.
    
    训练和测试样本有三种方式进行划分:(三选一)
    1. 将数据随机分训练和测试,多次平均求结果
    2. K折交叉验证
    3. 留1法
    针对不同维数,画出曲线图

二、解决方法

1、Fisher线性判别分析(LDA)

  两类的线性判别问题可以看作是把所有的样本都投影到一个方向上,然后在这个然后在这个一维空间中确定一个分类的阈值。过这个阈值点且与投影方向垂直的超平面就是两类的分类面。Fisher线性判别的思想就是,选择投影方向,使投影后两类相隔尽可能远,而同时每一类内部的样本又尽可能聚集,如图1所示。

Fisher线性判别分析_第1张图片

  这里只讨论两分类的问题,训练样本集是X ={x1,…,xN},每一个样本是一个d维向量,其中w1类的样本是X1 ={x11,…,xN11},w2类的样本是X2 ={x12,…,xN12}。我们要寻找一个投影方向W(W也是一个d维向量),投影以后的样本变成
Fisher线性判别分析_第2张图片

2、算法描述

1)留一法

  留一法是K折法的一种极端情况
  在K折法中,将全部训练集 S分成 k个不相交的子集,假设 S中的训练样例个数为 N,那么每一个子集有 N/k 个训练样例,相应的子集称作 {s1,s2,…,sk}。每次从分好的子集中里面,拿出一个作为测试集,其它k-1个作为训练集,根据训练训练出模型或者假设函数。然后把这个模型放到测试集上,得到分类率,计算k次求得的分类率的平均值,作为该模型或者假设函数的真实分类率。
  当取K的值为样本个数N时,即将每一个样本作为测试样本,其它N-1个样本作为训练样本。这样得到N个分类器,N个测试结果。用这N个结果的平均值来衡量模型的性能,这就是留一法。在UCI数据集中,由于数据个数较少,采用留一法可以使样本利用率最高。

2)Iris数据集

  在Iris数据集中,有150个样本,共三类Setosa、Versicolour、Virginica,一共有4维特征,分别为sepal length、sepal width、petal length、petal width.
  在Fisher线性判别方法中,由于只能够判别两类,所以将Iris数据集分三种情况:1-2类,1-3类,2-3类,分别判断每一种情况的Fisher判别准确率。用留一法对训练和测试样本进行划分之后,计算出每一类之间的最优投影方向W1、W2、W3之后,再进行准确率测试。

3)Sonar 数据集

  在 Sonar 数据集中,有 208 个样本,共两类:字母“R”(岩石)和“M”(矿 井),并且有一共有 60 维的特征。
  针对多维的情况,我们可以得出数据集在不同维度下的 Fisher 线性判别准 确率。在这个时候出现了一个问题:如何在 60 维中选取维数?假设我们要计算 在 42 维的准确率,选哪些维数才最接近真实值?对此,我采用多次取样求平均 的方法,对样本特征进行打乱,选前 42 维的特征进行计算,重复十次打乱的过 程,求准确率的平均值,这样可以规避由于某些特征比较易于区分而导致的准确 率高于平均水平的情况。

三、仿真结果

1、Iris数据集

  在最佳投影方向 W0 投影的结果,其中黑色的点为 W1 类,红色的点为 W2 类, 分类阈值为(0,0)点
Fisher线性判别分析_第3张图片
Fisher线性判别分析_第4张图片
Fisher线性判别分析_第5张图片
  从投影点可以看出,第一类和第二类、第一类和第三类相隔特别远,利用线性判别能够完全将它们分开,而第二类和第三类相隔比较近,但利用线性判别也能基本将其分开,得出的准确率也能证明这一点。

2、Sonar 数据集

首先对 60 维的时候进行投影,得到两类的投影结果
Fisher线性判别分析_第6张图片
从图中可以看出,两类的分界面处交集较多,准确率约为 0.75
将 60 维扩大到 1 ~ 60 维,得出每一维的准确率,针对不同维数,画出曲 线图。 Fisher线性判别分析_第7张图片
Fisher线性判别分析_第8张图片
从图中可以看出,在只有一维的时候,利用 Fisher 线性判别得出的准确率 约为 0.5,随着维数的增长,准确率慢慢提高,最终趋于一个稳定值 0.75 左 右。

四、代码

GitHub地址如下
Pattern recognition / LDA
https://github.com/Fangzhenxuan/AI_Projects.git

你可能感兴趣的:(模式识别)