分类判决界面---W-H、H-K算法

       本篇文章是博主在人工智能等领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在AI学习笔记:

      AI学习笔记(9)---《分类判决界面---W-H、H-K算法》

分类判决界面---W-H、H-K算法

目录

一、算法原理

1.1 W-H算法

1.2 H-K算法

二、实验要求

三、实验流程

四、运行结果


一、算法原理

1.1 W-H算法

        对于两类问题,设n+1维增广训练模式x1, x2, ...,xN已符号规范化。如果训练模式是线性可分的,则存在权矢量w使不等式组

        成立,即不等式组是一致的,有解。若训练模式是非线性可分的,表明不存在权矢量w对所有的训练模式都能正确分类,也就是说,无论任何的权矢量w,都有某些模式被错分,不等式不能都成立,即不等式组是不一致的,不等式组无解。在这种情况下,我们希望所求得的权矢量使尽可能多的不等式被满足,等价地说,使最少的训练模式被错分,或所得界面较稳健使对待分类模式有较好的分类效果。

        将上面的不等式组写成矩阵方程形式,为使解可靠,引人N维余量矢量b>0,于是不等式方程组变为

Xw ≥   b >   0
适当选择 b ,可以针对等式方程组

1.2 H-K算法

其他分类判决界面方法见 

分类判决界面---W-H、H-K算法


二、实验要求

采用下列两类模式为样本:

        w1 = [0 0 0; 1 0 0; 1 0 1; 1 1 0]

        w2 = [0 0 1; 0 1 1; 0 1 0; 1 1 1; 1 -1 0]

编程实现W-H算法和HK算法,对任意输入新样本进行分类判别。


三、实验流程

3.1 W-H 算法matlab代码

新建main.m文件
clc;
close all;
%% 数据预处理
X1 = [0 0 0; 1 0 0; 1 0 1; 1 1 0];
X2 = [0 0 1; 0 1 1; 0 1 0; 1 1 1; 1 -1 0];
X = [X1;-X2];
[N1,W] = size(X);
b = ones(N1,1);
%b = [9; 3; 1; 9; 1; 4; 2; 1];

%% W-H 算法
rou1 =1;
k1 = 100;
%w = zeros(W,1);
w = ones(W,1);
[w1, a1] = W_H(X,w,b,rou1,k1);
disp("解矢量:");
disp(w1);
disp("迭代次数:");
disp(a1);
% 画图
figure()
x1=X1(:,1);
y1=X1(:,2);
z1=X1(:,3);
scatter3(x1,y1,z1,'k');   %圆圈为正样本
hold on;
x2=X2(:,1);
y2=X2(:,2);
z2=X2(:,3);
scatter3(x2,y2,z2,'P');   %五角星为负样本
hold on;
x3 = w1(1);
y3 = w1(2);
z3 = w1(3);
[X,Y] = meshgrid(-2:2:2); %以法线绘制平面
Z = -(x3 * X + y3 * Y) / z3;
mesh(X,Y,Z,'FaceAlpha', '0.8');
xlabel('x'),ylabel('y'),zlabel('z');
title('W-H算法分类判决界面');

新建W_H.m文件

function [w,a] = W_H(X,w,b,rou,k)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% X:符号化的训练样本
% b:余量(初值设置为大于零的较小的值)
% rou:参数(设为0.5)
% k:迭代次数
% w:解矢量
% a:算法结束时的迭代次数
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
N = size(X,1);     % 样本数量
X = X';
a = 0;
while a < k  % 最大迭代次数
    a = a + 1;
    old_w = w;  
    for i = 1:N    
        w = w + (rou/i)*(b(i) - w'*X(:,i))*X(:,i);    % 迭代w的值
    end
    if norm(w - old_w) < 0.0001      % 求向量范数,如果收敛了就提前结束
        break
    end
end
end

3.2 H-K 算法matlab代码

main.m文件下面补充
%% H-K 算法
X = [X1;-X2];
[N1,W] = size(X);
b = ones(N1,1);
%b = [9; 3; 1; 9; 1; 4; 2; 1];
rou2 = 0.5;
[w2, a2] = H_K(X,b,rou2);
disp("解矢量:");
disp(w2);
disp("迭代次数:");
disp(a2);
% 画图
figure()
x1=X1(:,1);y1=X1(:,2);z1=X1(:,3);
scatter3(x1,y1,z1,'o');    % 圆圈为正样本
hold on;
x2=X2(:,1);y2=X2(:,2);z2=X2(:,3);
scatter3(x2,y2,z2,'P');    % 五角星为负样本
hold on;
x3 = w2(1);y3 = w2(2);z3 = w2(3);
[X,Y] = meshgrid(-2:2:2);  % 以法线绘制平面
Z = -(x3 * X + y3 * Y) / z3;
mesh(X,Y,Z,'FaceAlpha', '0.8');
xlabel('x'),ylabel('y'),zlabel('z');
hold on
title('H-K算法分类判决界面');

新建H_K.m文件

function [w , a] = H_K(X,b,rou)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% X:符号化的训练样本
% b:余量(初值设置为大于零的较小的值)
% rou:参数(设为0.5)
% k:迭代次数
% w:解矢量
% a:算法结束时的迭代次数
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
XX = inv(X'*X)*X';   % 求符号化的训练样本的伪逆矩阵
a = 0;  
while 1      % 循环开始
    a = a + 1;
    w = XX*b;      % 求w值 
    e = X*w - b;       % 计算误差矢量
    if sum(abs(e) >= 0.001) == 0   % 如果e为零矢量,则算法停止,此时判定为0的标准为0.001
        break
    elseif sum(abs(e > 0)) == 0      % 如果e没有正分量的非零矢量,或负的分量停止变为正值,则算法停止
        break
    else
        b = b + rou*(e + abs(e));   % 迭代b
        w = XX*b;                   % 迭代w
    end
end
end

四、运行结果

4.1 W-K 算法运行结果

4.2 H-K 算法运行结果


     文章若有不当和不正确之处,还望理解与指出。由于部分文字、图片等来源于互联网,无法核实真实出处,如涉及相关争议,请联系博主删除。如有错误、疑问和侵权,欢迎评论留言联系作者,或者私信联系作者。

  • 29
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不去幼儿园

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值