简单线性分类学习机(平分最近点法)matlab实现

简单线性分类学习机(平分最近点法)matlab实现
听语音

  • |
  • 浏览:19
  • |
  • 更新:2016-10-07 23:20
  • 简单线性分类学习机(平分最近点法)matlab实现 1
  • 简单线性分类学习机(平分最近点法)matlab实现 2
  • 简单线性分类学习机(平分最近点法)matlab实现 3
  • 简单线性分类学习机(平分最近点法)matlab实现 4
  • 简单线性分类学习机(平分最近点法)matlab实现 5
  • 简单线性分类学习机(平分最近点法)matlab实现 6
  • 简单线性分类学习机(平分最近点法)matlab实现 7
分步阅读

在分类问题中,如何划分类型是一个复杂而有意思的问题。本文介绍一种线性划分的方法:平分最近点法。在现实数据中,例如对某种疾病预测的评价指标,假设有两种,a因素和b因素。患病与不患病用“+”,“o”表示。即两种状态。

简单线性分类学习机(平分最近点法)matlab实现

工具/原料

  • Matlab

方法/步骤

  1. 采用直线的垂直平分线:

    首先求任意两点的之间的距离,构成距离矩阵,并求出最近距离,返回下标,求斜率,及两点之间的中点。并绘制垂直平分线。

    简单线性分类学习机(平分最近点法)matlab实现
  2. 代码:

    datax=[1 2;1.5 2;0.5 1;2 1.5;2.5 2];

    datay=[3 4;3.5 4;3.5 5;5 4.5;5.5 5];

    distance_matrix=zeros(length(datax),length(datay));

    for i=1:length(datax)

    for j=1:length(datay)

    distance_matrix(i,j)=sqrt((datax(i,1)-datay(j,1))^2+(datax(i,2)-datay(j,2))^2);

    end

    end

    [c,i]=min(distance_matrix);

    [k,j]=min(c);

    data=[datax(i(1),:);datay(j,:)];

    x=0:0.01:5;

    y=-1.0/((data(2,2)-data(1,2))/(data(2,1)-data(1,1)))*(x-(data(1,1)+data(2,1))/2)+(data(1,2)+data(2,2))/2;

    plot(datax(:,1),datax(:,2),'r+');hold on

    plot(datay(:,1),datay(:,2),'go');hold on

    plot(x,y,'b-')

    xlim([0,6]);

    ylim([0,6]);

    plot(4,3.5,'r*')

    *点用于表示检测的数据点

    简单线性分类学习机(平分最近点法)matlab实现
  3. 求 距离矩阵,返回 最小值下标,求垂直平分线方程。k1*k2=-1,并求出中点,斜率和在直线上的点坐标,构造方程,绘制曲线。scatter绘制散点图,

    简单线性分类学习机(平分最近点法)matlab实现
    简单线性分类学习机(平分最近点法)matlab实现
    简单线性分类学习机(平分最近点法)matlab实现
  4. 接下来介绍正式的算法:平分最近点法,

    通过非线性优化函数fmincon,求出向量α,使用α求出函数参数ω和b

    决策函数为:sign(ω*x+b)

  5. 代码如下:

    datax1=[1 2;1.5 2;0.5 1;2 1.5;2.5 2];

    datax2=[3 4;3.5 4;3.5 5;5 4.5;5.5 5];

    syms a1 a2 a3 a4 a5;

    a=[a1 a2 a3 a4 a5];

    [n m]=size(datax1);

    f=zeros(length(a));

    for i=1:n

    for j=1:m

    f(i)=f(i)+datax1(i,j)-datax2(i,j);

    end

    end

    tol=zeros(length(a),length(a));

    for i=1:length(f)

    for j=1:length(f)

    tol(i,j)=f(i)*f(j);

    end

    end

    tol=tol/2;

    .M file:

    function f=myfun_2(x)

    f=8*x(1)^2 + 16*x(1)*x(2) + 28*x(1)*x(3) + 24*x(1)*x(4) + 24*x(1)*x(5) + 8*x(2)^2 + 28*x(2)*x(3) + 24*x(2)*x(4) + 24*x(2)*x(5) + (49*x(3)^2)/2 + 42*x(3)*x(4) + 42*x(3)*x(5) + 18*x(4)^2 + 36*x(4)*x(5) + 18*x(5)^2;

    [x,fval]=fmincon(@myfun_2,[0.2;0.2;0.2;0.2;0.2],[-1  0 0 0 0;0 -1 0 0 0;0 0 -1 0 0;0 0 0 -1 0;0 0 0 0 -1],[0;0;0;0;0],[1 1 1 1 1],[1])

    c=0;d=0;

    for i=1:length(x)

    c=c+datax1(i,1)*x(i)+datax1(i,2)*x(i);

    end

    for i=1:length(x)

    d=d+datax2(i,1)*x(i)+datax2(i,2)*x(i);

    end

    w=c-d;

    b=-1/2*((c-d)*(c+d));

    简单线性分类学习机(平分最近点法)matlab实现
    简单线性分类学习机(平分最近点法)matlab实现
  6. 6

    关于fmincon这是一个非线性优化函数,也是常用的优化函数之一。

    A*x<=b

    Aeq*x=beq

    lb<=x<=ub

    简单线性分类学习机(平分最近点法)matlab实现

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值