H-K算法介绍与MATLAB实现

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

      AI学习笔记(12)---《H-K算法介绍与MATLAB实现》

H-K算法介绍与MATLAB实现

目录

1. 前言

2.相关知识

2.1H-K 算法分类模型    

2.2样本的规范化

2.3最小二乘准则函数

2.4伪逆

3.H-K 算法原理

4.编程实现

4.1伪逆的计算MATLAB代码

4.2 H-K 算法求解MATLAB代码

4.3 测试输入


1. 前言

        理解并掌握 H-K 算法的基本原理,并针对 H-K算法实现需要掌握的前置知识进行练习实现。

        掌握 H-K 算法的求解步骤,并编程实现一个使用 H-K 算法求解分类模型的例子。


2.相关知识

2.1H-K 算法分类模型    

        H-K 算法与单层感知器算法具有一定的相似性,都属于线性分类的几何分类方法,即要求输入的样本集本身是线性可分的。但不同的是,H-K 算法对于线性不可分的样本集可以进行判别,这一点是单层感知器所不具备的。

        H-K 算法的出发点是以均方误差为准则函数而建立起来的。H-K 算法的分类模型与单层感知器一样,引入权值向量 w∈Rn 来作为分类模型, H-K 算法学习的过程就是求解 w∈Rn,如果样本集 x∈X 线性可分为两个集合X+,X−,那么应该存在一个权值向量 w 使得

        其中,我们将 y 称为线性可分类的标签值。

2.2样本的规范化

        我们将标签值 y 值为负的样本称为负样本,如果我们对样本集进行这样的操作:

        那么分类问题可以写为如下形式:

wx′>0

        此时,由x′构成的经过以上处理过的样本集称为规范化的样本向量。此时,分类问题变成了求解不等式 wx′>0 的问题。

2.3最小二乘准则函数

        求解不等式 wx′>0 的问题可以进一步转化为 wx′=b(b>0) 的问题,同时对所有的样本进行联立,得到方程组 wX=B ,其中向量 B 的每个分量 bi​>0。针对这样一个有多个可能解的方程组,我们可以求它的最小二乘解。即使得

        取极小值(上式即为 H-K 算法的最小二乘准则函数)。此时可以使用梯度下降法或者伪逆法进行求解。为了下一关更好的介绍 H-K 算法,这里你需要了解伪逆的求法。

2.4伪逆

      伪逆(pseudo inverse)是对于矩阵逆的一种推广,满足一定性质的矩阵都可以成为矩阵A的伪逆。伪逆具有存在且唯一的良好性质,可以用于解决最小二乘和最小范数问题。矩阵 X 的伪逆计算方式如下:


3.H-K 算法原理

        通过对分类问题的一步步抽象,H-K 算法求解分类问题变成了一个线性方程组求解的问题,即:

        其中 w 是要求解的参数,X 是所有样本规范化之后得到矩阵,B是所有分量大于 0 的向量。

        如果对于任意 B 这个方程组都无解,那么说明样本集线性不可分。

        以上线性方程式可以通过最小二乘变成一个优化问题,即找到 w 使得

        尽可能的小。用 Jw 求偏导,

        其中,X#=(XTX)−1XTX的伪逆。

        因此,求 w 就相当于求满足前述条件的 B

H-K 算法步骤

H-K 算法步骤也就是通过迭代一步一步的逼近出理想的 B

  • 步骤 1:随机初始化 B ,其每个分量均为正值;
  • 步骤 2:计算 w=X#B;
  • 步骤 3:计算 e=Xw−b
  • 步骤 4:根据 e的取值情况作进一步处理:
    • 若分量全部大于等于 0,算法结束,求解完成;
    • 若分量有正有负,则跳到步骤 5 继续迭代;
    • 若分量全部小于 0,停止迭代,样本线性不可分。
  • 步骤 5:完成更新计算

     并跳转到步骤 2; 其中 ∣e∣ 是向量的模运算,即二范数。

4.编程实现

4.1伪逆的计算MATLAB代码

function [result] = step1_mission(samples, labels)
    for i = 1:length(labels) % 遍历每一个标签
        if labels(i) < 0 % 如果标签小于0
            samples(i,:) = -samples(i,:); % 对应样本取反
        end
    end
    result = inv(samples.' * samples) * samples.'; % 计算伪逆矩阵
end

4.2 H-K 算法求解MATLAB代码

function [w, b, flag] = step2_mission(samples, labels)
    samples_X = diag(labels) * samples; % 将样本矩阵与标签对角矩阵相乘,生成样本变换矩阵 samples_X
    X = pinv(samples_X); % 计算样本变换矩阵的伪逆矩阵 X
    [~, num] = size(labels); % 获取标签的数量,即样本数量 num
    b = ones(num, 1); % 初始化长度为 num 的全 1 向量 b
    while(1 == 1) % 无限循环,直到满足终止条件
        w = X * b; % 计算权重向量 w
        e = samples_X * w - b; % 计算误差向量 e
        flagt = 0; % 初始化正误差计数器
        flagf = 0; % 初始化负误差计数器
        for i = 1:num % 遍历每一个样本
            if (e(i) > -0.01) % 若误差大于 -0.01,正误差计数器加一
                flagt = flagt + 1;
            end
            if (e(i) < -0.01) % 若误差小于 -0.01,负误差计数器加一
                flagf = flagf + 1;
            end
        end
        if (flagt == 0) % 若没有正误差,设置标志为 -1 并跳出循环
            flag = -1;
            break
        end
        if (flagf == 0) % 若没有负误差,设置标志为 1 并跳出循环
            flag = 1;
            break
        end
        b = b + 0.1 * (e + norm(e)); % 更新向量 b,步长为 0.1
    end
end

4.3 测试输入

MATLAB终端输入下面指令

测试step1_mission(samples, labels)

samples = [-7.82 -4.58 -3.97; -6.68 3.16 2.71; 4.36 -2.91 2.09; 6.72 0.88 2.80; -8.64 3.06 3.50; -6.87 0.57 -5.45; 4.47 -2.62 5.76; 6.73 -2.01 4.18; -7.71 2.34 -6.33; -6.91 -0.49 -5.68; 6.18 2.81 5.82; 6.72 -0.93 -4.04; -6.25 -0.26 0.56; -6.94 -1.22 1.13; 8.09 0.20 2.25; 6.81 0.17 -4.15; -5.19 4.24 4.04; -6.38 -1.74 1.43; 4.08 1.30 5.33; 6.27 0.93 -2.78];
labels = [-1.0000    1.0000    1.0000    1.0000   -1.0000   -1.0000    1.0000    1.0000   -1.0000   -1.0000    1.0000    1.0000   -1.0000   -1.0000    1.0000    1.0000    1.0000   -1.0000    1.0000    1.0000];

s1 = samples(1:6,1:end);
l1 = labels(1:6);

s2 = samples(1:10,1:end);
l2 = labels(1:10);

s3 = samples(10:end,1:end);
l3 = labels(10:end);

s4 = samples;
l4 = labels;

disp('task1');
r1 = step1_mission(s1, l1)

disp('task2');
r1 = step1_mission(s2, l2)

disp('task3');
r1 = step1_mission(s3, l3)

disp('task4');
r1 = step1_mission(s4, l4)

 测试step2_mission(samples, labels)

samples = [-7.82 -4.58 -3.97; -6.68 3.16 2.71; 4.36 -2.91 2.09; 6.72 0.88 2.80; -8.64 3.06 3.50; -6.87 0.57 -5.45; 4.47 -2.62 5.76; 6.73 -2.01 4.18; -7.71 2.34 -6.33; -6.91 -0.49 -5.68; 6.18 2.81 5.82; 6.72 -0.93 -4.04; -6.25 -0.26 0.56; -6.94 -1.22 1.13; 8.09 0.20 2.25; 6.81 0.17 -4.15; -5.19 4.24 4.04; -6.38 -1.74 1.43; 4.08 1.30 5.33; 6.27 0.93 -2.78];
labels = [-1.0000    1.0000    1.0000    1.0000   -1.0000   -1.0000    1.0000    1.0000   -1.0000   -1.0000    1.0000    1.0000   -1.0000   -1.0000    1.0000    1.0000    1.0000   -1.0000    1.0000    1.0000];

w1 = [1.0 1.0 1.0];
w2 = [-1.0 1.0 -1.0];
w3 = [-1.0 0.0 2.0];
w4 = [1.0 1.0 -1.0];

b1 = 1.0;
b2 = 2.0;
b3 = 3.0;
b4 = 4.0;

eta1 = 0.1;
eta2 = 0.2;
eta3 = 0.3;
eta4 = 0.5;

s1 = samples(5:15,1:end);
l1 = labels(5:15);

s2 = samples(1:10,1:end);
l2 = labels(1:10);

s3 = samples(10:end,1:end);
l3 = labels(10:end);

disp('task1');
[w,b,f] = step2_mission(s1, l1)

disp('task2');
[w,b,f] = step2_mission(s2, l2)

disp('task3');
[w,b,f] = step2_mission(s3, l3)

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/754357.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

sql想查询一个数据放在第一个位置

sql想查询一个数据放在第一个位置 背景:比如在查询后台账号的时候想将管理员账号始终放在第一个,其他账号按照创建时间倒序排序, 可以这样写sql: SELECTid,create_time FROMuser ORDER BY CASEWHEN id 1 THEN1 ELSE 2 END ASC, create_time DESC 运行截图: 可以看到id…

运算放大器输出相位反转和输入过压保护

运算放大器输出电压相位反转 本教程讨论两个与运算放大器相关的话题&#xff1a;输出相位反转和输入过压保护。 超过输入共模电压(CM)范围时&#xff0c;某些运算放大器会发生输出电压相位反转问题。其原因通常是运算放大器的一个内部级不再具有足够的偏置电压而关闭&#xff…

新火种AI|苹果要将苹果智能做成AI时代的APP Store?

作者&#xff1a;一号 编辑&#xff1a;美美 苹果还是想要自己做AI时代的“APP Store”。 自从去年开始落了队&#xff0c;苹果现在AI上开始高歌猛进。今年WWDC上展示的AI产品和与OpenAI的合作只是开始。有消息称&#xff0c;苹果正与Meta等AI巨头展开深入合作&#xff0c;这…

信息学奥赛初赛天天练-38-CSP-J2021阅读程序-约数个数、约数和、埃氏筛法、欧拉筛法筛素数应用

PDF文档公众号回复关键字:20240628 2021 CSP-J 阅读程序3 1阅读程序(判断题1.5分 选择题3分 共计40分 ) 01 #include<stdio.h> 02 using namespace std; 03 04 #define n 100000 05 #define N n1 06 07 int m; 08 int a[N],b[N],c[N],d[N]; 09 int f[N],g[N]; 10 11 …

容器化spring boot应用程序

容器化spring boot应用程序有多种方式&#xff0c;如基于简单的Dockerfile&#xff0c;多阶段Dockerfile以及基于Docker Compose等&#xff0c;我们将逐步给大家介绍&#xff0c;本节主要介绍基于简单的Dockerfile进行容器化spring boot的应用程序。 创建Spring boot应用程序 …

日志可视化监控体系ElasticStack 8.X版本全链路实战

目录 一、SpringBoot3.X整合logback配置1.1 log4j、logback、self4j 之间关系 1.2 SpringBoot3.X整合logback配置 二、日志可视化分析ElasticStack 2.1为什么要有Elastic Stack 2.2 什么是Elastic Stack 三、ElasticSearch8.X源码部署 ​四、Kibana源码部署 五、LogSta…

【计算机系统结构】复习重点(计算机系统结构(第3版)张晨曦 王志英等)

注意 导入过来排版不太对&#xff0c;建议看我的语雀文档 https://www.yuque.com/tongyan-qsj3t/zwlq23/dobnlmaa9knfxfsv?singleDoc# 《【计算机系统结构】复习重点&#xff08;计算机系统结构&#xff08;第3版&#xff09;张晨曦 王志英等&#xff09;》 教材版本 计算机…

Element-UI 并排显示多个 disabled按钮的时候, 不生效问题解决

目录 Element-UI 并排显示多个 disabled按钮的时候&#xff0c; 不生效问题解决 解决方法&#xff1a; 运行结果&#xff1a; Element-UI 并排显示多个 disabled按钮的时候&#xff0c; 不生效问题解决 解决方法&#xff1a; Element-UI 并排显示多个 disabled按钮的时候&a…

摄影楼电子相册打开的正确方式,快来看看

​随着科技的不断发展&#xff0c;电子相册已经成为许多人存储和分享照片的重要方式。然而&#xff0c;你知道如何正确打开电子相册吗&#xff1f;今天&#xff0c;我就来教大家一下电子相册的正确打开方式&#xff0c;快来学习一下吧&#xff01; 第一步&#xff1a;选择合适的…

【离散数学·图论】(复习)

一、基本概念 1.一些基本术语&#xff1a; 2.点u&#xff0c;v邻接&#xff08;或相邻&#xff09;: 边e称为关联顶点u和v,or e连接u和v; 3.G(V,E)中&#xff0c;顶点v所有邻居的集合&#xff1a;N(v), 成为v的邻域。 4.度 &#xff1a; deg(v) 5.悬挂点&#xff1a;度为1的…

智慧园区大数据云平台建设方案(Word原件)

第一章 项目建设背景及现状 第二章 园区创新发展趋势 第三章 工业园区大数据存在的问题 第四章 智慧工业园区大数据建设目的 第五章 智慧园区总体构架 第六章 系统核心组件 第七章 智慧工业园区大数据平台规划设计 获取方式&#xff1a;本文末个人名片直接获取。 软件资料清单…

为什么不再推荐使用 VRTK 4?

引言 VRTK (Virtual Reality Toolkit) 发布于2016年&#xff0c;初期受到了广大开发者的欢迎并被广泛采用。但是随着 VR 开发生态的发展&#xff0c;这款工具逐渐失去了最初的光芒。本文试图通过几个维度的分析&#xff0c;解释为什么目前不推荐使用 VRTK 进行开发的理由&…

高电压技术-冲击高压发生器MATLAB仿真

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 冲击电压发生器是产生冲击电压波的装置&#xff0c;用于检验电力设备耐受大气过电压和操作过电压的绝缘性能&#xff0c;冲击电压发生器能产生标准雷电冲击电压波形&#xff0c;雷电冲击电压截波,标准操作冲击…

K8S 角色/组件及部署方式的简单概述

1.宏观架构图 2.角色详情 2.1 Master(Controller Plane) 早期是叫 Master 节点&#xff0c;后期改名为 Controller Plane&#xff0c;负责整个集群的控制和管理 Master 不会干活的(当然你让它干也是会干的&#xff0c;涉及到污点容忍)&#xff0c;而是起到访问入口&#xff…

OPENCV清晰度判断(二)

文章目录 提取ROI判断清晰度灰度共轭矩阵(GLCM)灰度共轭函数的简单原理&#xff1a;计算灰度共轭矩阵代码计算矩阵的对比度 LBP&#xff1a;LBP的基本原理LBP代码 之前有过一篇关于清晰度的判断的文章&#xff1a; python的opencv操作记录(九)——图像清晰度计算。 这一篇里面…

代理IP对SEO影响分析:提升网站排名的关键策略

你是否曾经为网站排名难以提升而苦恼&#xff1f;代理服务器或许就是你忽略的关键因素。在竞争激烈的互联网环境中&#xff0c;了解代理服务器对SEO的影响&#xff0c;有助于你采取更有效的策略&#xff0c;提高网站的搜索引擎排名。本文将为你详细分析代理服务器在SEO优化中的…

使用FRP 0.58版本进行内网穿透的详细教程

什么是FRP&#xff1f; FRP&#xff08;Fast Reverse Proxy&#xff09;是一款高性能的反向代理应用&#xff0c;主要用于内网穿透。通过FRP&#xff0c;您可以将内网服务暴露给外网用户&#xff0c;无需进行复杂的网络配置。 准备工作 服务器&#xff1a;一台具备公网IP的服…

软件设计师笔记-操作系统知识(二)

线程 以下是关于线程的一些关键点&#xff1a; 线程是进程中的一个实体&#xff1a;进程是操作系统分配资源&#xff08;如内存空间、文件句柄等&#xff09;的基本单位&#xff0c;而线程是进程中的一个执行单元。多个线程可以共享同一个进程的地址空间和其他资源。线程是CP…

昇思25天学习打卡营第3天|函数式自动微分

文章目录 昇思MindSpore快速入门基于MindSpore的函数式自动微分1、简介2、函数与计算图算例3、微分函数与梯度计算4、Stop Gradient&#xff08;停止梯度计算&#xff09;5、Auxiliary data6、神经网络梯度计算 Reference 昇思MindSpore快速入门 基于MindSpore的函数式自动微分…

在flask中加载mnist模型,并预测图片

一、在tensorflow中新建及保存模型 启动Jupyter Notebook 新建Notebook 生成 mnist_model.h5 模型的代码 import tensorflow as tf from tensorflow.keras.datasets import mnist from tensorflow.keras.models import Sequential from tensorflow.keras.layers import…