首页 > 编程语言 >分类判决界面---W-H、H-K算法

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

时间:2024-06-23 14:58:47浏览次数:20  
标签:disp 界面 迭代 矢量 --- 算法 X2 X1

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


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

标签:disp,界面,迭代,矢量,---,算法,X2,X1
From: https://blog.csdn.net/qq_51399582/article/details/139819137

相关文章

  • 海洋生物识别系统+图像识别+Python+人工智能课设+深度学习+卷积神经网络算法+TensorFl
    一、介绍海洋生物识别系统。以Python作为主要编程语言,通过TensorFlow搭建ResNet50卷积神经网络算法,通过对22种常见的海洋生物(‘蛤蜊’,‘珊瑚’,‘螃蟹’,‘海豚’,‘鳗鱼’,‘水母’,‘龙虾’,‘海蛞蝓’,‘章鱼’,‘水獭’,‘企鹅’,‘河豚’,‘魔鬼鱼’,‘......
  • 聚类算法(2)--- ISODATA算法
           本篇文章是博主在人工智能等领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在AI学习笔记:      AI学习笔记(8)---《聚类算法(2)---ISODATA算......
  • Python进阶学习笔记-基础篇
    打印原始字符串print(r"D:\three\two\one\now")D:\three\two\one\now复现随机数importrandomx=random.getstate()print(random.randint(1,10))print(random.randint(1,10))print(random.randint(1,10))random.setstate(x)print(random.randint(1,10))pr......
  • Python进阶学习笔记-函数篇
    函数的特殊参数#/前的参数只能是位置参数,*后面的只能是关键字参数,之间的不限参数类型deffunc(a,b,/,c,*,d,e):print(a,b,c,d,e)func(1,2,3,d=4,e=5)func(1,2,c=3,d=4,e=5)#a,b不能以关键字形式传参,d,e只能以关键字参数传参#可变参数*argsdef......
  • Python进阶学习笔记-面向对象篇
    组合classEngine:"""引擎类,提供基本的引擎功能"""def__init__(self,power):self.power=powerdefstart(self):print(f"引擎启动,功率:{self.power}")classCar:"""汽车类,使用引擎类的功能"&......
  • softmax-regression
    importtorchfromd2limporttorchasd2lbatch_size=50train_iter,test_iter=d2l.load_data_fashion_mnist(batch_size)help(d2l.load_data_fashion_mnist)Helponfunctionload_data_fashion_mnistinmoduled2l.torch:load_data_fashion_mnist(batch......
  • 基于协同过滤算法的智能推荐系统基础介绍
    协同过滤算法概述协同过滤算法的核心思想是通过用户或物品的相似性进行推荐。该算法主要分为两类:基于用户的协同过滤(User-basedCollaborativeFiltering):寻找相似的用户群体,推荐他们喜欢的产品给目标用户。基于物品的协同过滤(Item-basedCollaborativeFiltering):根据用户的历......
  • 毕业设计-基于SSM+JSP的毕业生就业信息管理系统的设计与实现(源码+LW+包运行)
    基于SSM+JSP的毕业生就业信息管理系统开发语言:Java数据库:MySQL技术:Spring+SpringMVC+MyBatis+Jsp工具:IDEA/Ecilpse、Navicat、Maven本文以jsp为开发技术,实现了一个毕业生就业信息管理系统。毕业生就业信息管理系统的主要使用者分为管理员、学生、就业导师、企业,管理员如下权......
  • vulnhub--CTF01
    环境渗透攻击机:192.168.96.4靶机CTF01:ip未知主机探测fscan命令1for/l%iin(1,1,255)[email protected].%i-w1-n1|find/i"ttl"ARPnetdiscover-ieth0综上结果,确定了靶机的ip为192.168.96.31端口探测端口探测主要使用nmap、fscan、goby等工具敏......
  • 数据维度的魔法师:使用scikit-learn进行t-SNE可视化
    标题:数据维度的魔法师:使用scikit-learn进行t-SNE可视化引言在数据科学领域,我们经常面临高维数据的挑战。这些数据在原始空间中可能难以直观理解。t-SNE(t-分布随机邻域嵌入)作为一种强大的降维技术,可以将高维数据映射到二维或三维空间,以便于我们进行可视化和探索。本文将详......