线性分类器与非线性分类器(二):Fisher线性判别

技术凯 2020-12-21 00:00:00 14004
一、什么是Fisher判别

  Fisher线性判别给模式识别问题提供了一个新思路,与Bayes决策以及其他的决策方法直接处理高维问题不同,Fisher线性判别是将d维数据投影到1维空间进行分类。因此,使用Fisher线性判别进行分类就可以归结为寻找最佳投影方向的问题,在这个最佳投影方向上,样本的投影能够分开得最好。
  如图,将二维平面中的数据投影到一条直线上之后,分类问题就简单很多,我们只需要找到一个点作为分类边界即可。

二、Fisher线性判别的Matlab实现

  Fisher线性判别要解决的基本问题就是确定最佳投影方向。要确定最佳的投影方向,首先得计算出类内离散度和各类样本的均值,然后通过相应公式即可计算出最佳投影距离。最后确定一维空间的分类阈值,从而对样本进行分类。分类阈值的确定有三种方法——均值中点法、类样本数加权法和先验概率加权法。
具体Matlab实现如下:
(1)导入数据,获取相关信息,并计算各类样本的均值。flag变量用于选择分类阈值的确定方法。

clear
load('2-Class Problem.mat')
flag=3;% 1:均值中点法。2:类样本数加权法。3:先验概率加权法
tic
% 获取数据集信息
[d1,n1]=size(Training_class1);
[d2,n2]=size(Training_class2);
test_num=size(Testing,2);
% 各类样本均值
m1=sum(Training_class1,2)/n1;
m2=sum(Training_class2,2)/n2;

(2)计算类内离散度,计算最佳投影方向并将数据投影到一维空间

% 计算类内离散度
s1=(Training_class1-m1)*(Training_class1-m1)';
s2=(Training_class2-m2)*(Training_class2-m2)';
% 最佳投影方向
w=(s1+s2)\(m1-m2);
% 将数据投影到一维Y空间
y1=w'*Training_class1;
m1_=sum(y1)/n1;
y2=w'*Training_class2;
m2_=sum(y2)/n2;
y=w'*Testing;

(3)确定分类阈值并进行分类
a.使用均值中点法:

% 预测
if flag==1
    % 使用均值中点法确定分类阈值
    y01=(m1_+m2_)/2;
    predict=0;
    for i=1:test_num
        if y(i)>y01
            predict(i)=1;
        else
            predict(i)=2;
        end
    end
    acc=sum(predict==Label_Testing)/test_num;
    fprintf('使用均值中点法,准确度为:%.2f%%\n',acc*100);

b.使用类样本数加权法:

elseif flag==2
    % 使用类样本数加权法
    y02=(n1*m1_+n2*m2_)/(n1+n2);
    predict=0;
    for i=1:test_num
        if y(i)>y02
            predict(i)=1;
        else
            predict(i)=2;
        end
    end
    acc=sum(predict==Label_Testing)/test_num;
    fprintf('使用类样本数加权法,准确度为:%.2f%%\n',acc*100);

c.使用先验概率加权法:

else
    % 使用先验概率加权法
    pw1=n1/(n1+n2);
    pw2=n2/(n1+n2);
    y03=(m1_+m2_)/2+(log(pw1)-log(pw2))/(n1+n2-2);
    predict=0;
    for i=1:test_num
        if y(i)>y03
            predict(i)=1;
        else
            predict(i)=2;
        end
    end
    acc=sum(predict==Label_Testing)/test_num;
    fprintf('使用先验概率加权法,准确度为:%.2f%%\n',acc*100);
end
toc

完整代码如下:

clear
load('2-Class Problem.mat')
flag=3;% 1:均值中点法。2:类样本数加权法。3:先验概率加权法
tic
% 获取数据集信息
[d1,n1]=size(Training_class1);
[d2,n2]=size(Training_class2);
test_num=size(Testing,2);
% 各类样本均值
m1=sum(Training_class1,2)/n1;
m2=sum(Training_class2,2)/n2;
% 计算类内离散度
s1=(Training_class1-m1)*(Training_class1-m1)';
s2=(Training_class2-m2)*(Training_class2-m2)';
% 最佳投影方向
w=(s1+s2)\(m1-m2);
% 将数据投影到一维Y空间
y1=w'*Training_class1;
m1_=sum(y1)/n1;
y2=w'*Training_class2;
m2_=sum(y2)/n2;
y=w'*Testing;
% 预测
if flag==1
    % 使用均值中点法确定分类阈值
    y01=(m1_+m2_)/2;
    predict=0;
    for i=1:test_num
        if y(i)>y01
            predict(i)=1;
        else
            predict(i)=2;
        end
    end
    acc=sum(predict==Label_Testing)/test_num;
    fprintf('使用均值中点法,准确度为:%.2f%%\n',acc*100);
elseif flag==2
    % 使用类样本数加权法
    y02=(n1*m1_+n2*m2_)/(n1+n2);
    predict=0;
    for i=1:test_num
        if y(i)>y02
            predict(i)=1;
        else
            predict(i)=2;
        end
    end
    acc=sum(predict==Label_Testing)/test_num;
    fprintf('使用类样本数加权法,准确度为:%.2f%%\n',acc*100);
else
    % 使用先验概率加权法
    pw1=n1/(n1+n2);
    pw2=n2/(n1+n2);
    y03=(m1_+m2_)/2+(log(pw1)-log(pw2))/(n1+n2-2);
    predict=0;
    for i=1:test_num
        if y(i)>y03
            predict(i)=1;
        else
            predict(i)=2;
        end
    end
    acc=sum(predict==Label_Testing)/test_num;
    fprintf('使用先验概率加权法,准确度为:%.2f%%\n',acc*100);
end
toc

运行结果分析:Fisher线性判别处理二分类问题时,运行时长都在0.01s以内,而且三种分类阈值确定方法均可达到100%的分类正确率。

三、总结

  Fisher线性判别从另一个思路出发,将高维度问题转换到了一维分类问题,大大降低了程序的运行耗时,提高程序运行效率。这种方式对于我们日后对高维数问题的降维处理提供了思路。

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包 点赞 收藏 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
技术凯
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区