MATLAB分类与判别模型算法: 快速近邻法(FastNN)分类程序【含Matlab源码 MX_005期】

算法思路介绍:

1. 数据准备阶段:
   生成一个合成数据集 `X`,其中包含三个簇,每个簇分布在不同的区域。
   定义聚类层数 `L` 和每个层次的子集数量 `l`。

2. 聚类阶段:
   使用K均值聚类算法将初始数据集 `X` 分成 `l` 个簇。
   对于每个簇,计算其中心点 `Mp` 和最大半径 `Rp`,以及每个点到中心点的距离 `D`。
   对每个簇,存储其数据点 `Xp`,中心点 `Mp` 和半径 `Rp`。

3. 树搜索阶段:
     选择一个待判定的样本 `x`。
     初始化一个阈值 `B` 为正无穷,当前层数 `CurL` 为 1,以及节点指针 `p` 为 0。
     进入主循环,直到所有节点都被搜索完毕:
     在每一轮中,从当前节点的子节点中选择一个最有可能的节点,计算其与待判定样本的距离。
     如果当前节点是叶子节点:
               检查是否有更近的邻居点,更新最近邻距离 `B` 和最近邻点 `Xnn`。
       如果当前节点不是叶子节点:
               进入下一层,继续搜索。

4. 输出结果:
   输出最近邻点 `Xnn` 和其索引。

主要步骤:

数据准备阶段:
   1. 生成合成数据集 `X`。
   2. 定义聚类层数 `L` 和每个层次的子集数量 `l`。

聚类阶段:
   1. 对数据集进行 K 均值聚类。
   2. 存储每个簇的数据点、中心点和半径。

树搜索阶段:
   1. 初始化参数,如待判定样本 `x`、阈值 `B`、当前层数 `CurL` 和节点指针 `p`。
   2. 在循环中,从当前节点的子节点中选择一个最有可能的节点。
   3. 如果当前节点是叶子节点,则检查是否有更近的邻居点。
   4. 如果当前节点不是叶子节点,则进入下一层继续搜索。

输出结果:
    输出最近邻点 `Xnn` 和其索引。

部分代码(完整代码在最后):

% ---进行树搜索---
tic
x=randn(1,2);%待判样本
B=inf;CurL=1;p=0;TT=1;
while TT==1 %步骤2Xcurp=cell(1);CurTable=cell(l,1);CurPinT=zeros(l,1);Dx=zeros(l,1);RpCur=zeros(l,1);%当前节点的直接后继放入目录表   for i=1:l   CurTable(i,1)=Xp(i+p*l,1);CurPinT(i)=i+p*l;Dx(i)=norm(x-Mp(i+p*l,:))^2;RpCur(i)=Rp(i+p*l);end    while 1 %步骤3[rowT,colT]=size(CurTable);for i=1:rowT                   if Dx(i)>B+RpCur(i)+eps%从目录表中去掉当前节点pCurTable(i,:)=[];CurPinT(i)=[];Dx(i)=[];RpCur(i)=[];break;endend[CurRowT,CurColT]=size(CurTable);if CurRowT==0CurL=CurL-1;p=floor((p-1)/3);if CurL==0TT=0; break;  else%转步骤3endelseif CurRowT>0[Dxx,Dxind]=sort(Dx,'ascend');p1=CurPinT(Dxind(1));p=p1;%从当前目录表去掉p1for j=1:CurRowTif CurPinT(j)==p1Xcurp(1,1)=CurTable(j,1);CurTable(j,:)=[];CurPinT(j)=[];CurD=Dx(j);%记录D(x,Mp)Dx(j)=[];RpCur(j)=[];                    break;endendif CurL==LXcurpMat=cell2mat(Xcurp);[CurpRow,CurpCol]=size(XcurpMat);CurpMean=Mp(p,:);for k=1:CurpRowDxi=norm((XcurpMat(k,:)-CurpMean))^2;if CurD>Dxi+B+epselseDxxi=norm((x-XcurpMat(k,:)))^2;if Dxxi<B+epsB=Dxxi;Xnn=XcurpMat(k,:);endendendelseCurL=CurL+1;break;endendend
end
B,Xnn,NN=find(X(:,1)==Xnn(1))
time1=toc

结果展示:

完整代码:MATLAB分类与判别模型算法: 快速近邻法(FastNN)分类程序

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Marin说PCB之如何在主板上补偿链路中的走线的等长误差?

一场雨把我困在这里&#xff0c;你冷漠地看我没有穿雨衣淋成落汤鸡。今天刚刚出门时候看天气预报没有雨&#xff0c;于是我就没有带雨衣骑电动车去公司了&#xff0c;谁知道回来的路上被淋成狗了。天气预报就像是女人的脾气那样&#xff0c;不能完全相信的。 好了&#xff0c;我…

编译安装MySQL服务(LAMP2)

目录 1.初始化设置&#xff0c;将安装mysql 所需软件包传到/opt目录下 &#xff08;1&#xff09;关闭防火墙 &#xff08;2&#xff09;上传软件包到/opt目录 2.安装环境依赖包 3.配置软件模块 4.编译及安装 5.创建mysql用户 6.修改mysql 配置文件 7.更改mysql安装目…

JavaScript-JavaWeb

目录 什么是JavaScript? js引入方式 js基础语法 书写语法 变量 数据据类型 运算符 类型转换 流程语句 js函数 js对象 1.Array 2.String 3.JSON js事件监听 什么是JavaScript? ● JavaScript(简称:JS)是一门跨平台、面向对象的脚本语言。是用来控制网页行为的,它能…

2024了,还有人在问为甚死锁?

大家好&#xff0c;我是javapub。 接上篇提到了锁&#xff0c;《InnoDB有哪些锁类型》。这么多的锁&#xff0c;你有遇到过死锁吗&#xff1f; 死锁是在事务数据库中会发生的一种特殊现象&#xff0c;多个事务在执行过程中&#xff0c;相互等待对方持有的资源&#xff0c;导致…

Docker-一文详解容器通信的基础网络模式及衍生的自定义网络模式

启动容器时&#xff0c;通过-p 宿主机端口:容器端口&#xff0c;就可以通过访问宿主机端口访问到容器&#xff0c;这种原理机制是啥&#xff0c;有没有其它方式可以让宿主机和容器通信&#xff0c;以及容器与容器之间如何通信。带着这几个问题开始学习Docker的网络知识。 文章…

【Linux】初识Linux和Linux环境配置

1.什么是Linux操作系统 说到电脑系统 我想有大多数人会脱口而出&#xff1a;windows、mac 是的&#xff0c;这也是如今市场上主流的两种操作系统。 但是对于IT相关的人士来说&#xff0c;还有一种系统也是必须有姓名 那就是Linux Linux&#xff0c;Linux Is Not UniX 的…

PV PVC

默写 1 如何将pod创建在指定的Node节点上 node亲和、pod亲和、pod反亲和: 调度策略 匹配标签 操作符 nodeAffinity 主机 In,NotIn,Exists,DoesNotExist&#xff0c;Gt&#xff0c;Lt podAffinity …

代码随想录-Day23

669. 修剪二叉搜索树 方法一&#xff1a;递归 class Solution {public TreeNode trimBST(TreeNode root, int low, int high) {if (root null) {return null;}if (root.val < low) {return trimBST(root.right, low, high);} else if (root.val > high) {return trimBS…

C语言:从键盘输入若干行字符(每行长度不等),输入后把它们存储到一磁盘文件中。再从该文件中读入这些数据,将其中小写字母转换成大写字母后在显示屏上输出。

void load(char str[100]) {int i 0;FILE* pf fopen("count.txt", "r");if (pf NULL){perror("error:");return 1;}printf("把字符转成大写后\n");while (fscanf(pf,"%s",str)!EOF){for (i 0; str[i] ! \0; i){if (str[…

24V_2A_1.2MHZ|PCD0303升压恒频LCD背光源专用电路超小体积封装

概述 PCD0303是一个恒定频率&#xff0c;6针SOT23电流模式升压转换器用于小型低功耗应用。PCD0303 以1.2MHz切换&#xff0c;并且允许使用微小的&#xff0c;低成本电容器和电感器2mm或更小,内部软启动会产生较小的涌入电流延长电池寿命。PCD0303具有自动切换至轻负载下的脉冲…

磁带存储:“不老的传说”依然在继续

现在是一个数据指数增长的时代&#xff0c;根据IDC数据预测&#xff0c;2025年全世界将产生175ZB的数据。 这里面大部分数据是不需要存储的&#xff0c;在2025预计每年需要存储11ZB的数据。换算个容易理解的说法&#xff0c;1ZB是10^18Bytes, 相当于要写5556万块容量18TB的硬盘…

探数API分享-全球电价一览:谁最高,谁最低?

全球家庭用电价格的平均水平约为0.139美元/千瓦时&#xff0c;这是根据2021年12月的统计数据得出的。在这个平均水平之上&#xff0c;有一些国家的家庭用电价格远超过这个数值&#xff0c;特别是在欧洲的一些发达国家。 丹麦、荷兰、德国、英国、西班牙、比利时等国家的家庭用…

6.S081的Lab学习——Lab5: xv6 lazy page allocation

文章目录 前言一、Eliminate allocation from sbrk() (easy)解析&#xff1a; 二、Lazy allocation (moderate)解析&#xff1a; 三、Lazytests and Usertests (moderate)解析&#xff1a; 总结 前言 一个本硕双非的小菜鸡&#xff0c;备战24年秋招。打算尝试6.S081&#xff0…

快手自动私信获客软件,精准定位潜在客户

在当今数字化营销时代&#xff0c;短视频平台已成为企业与个人品牌不可忽视的流量宝地。快手作为国内领先的短视频社交平台&#xff0c;汇聚了庞大的用户群体和丰富的兴趣社区&#xff0c;为各类商家、创作者提供了无限商机。如何在快手平台上高效引流获客&#xff0c;实现精准…

JAVA-->方法的使用详解

JAVA–>方法的使用详解 1.方法的概念及使用 1.1 什么是方法 : 方法就是一个代码片段. 类似于 C 语言中的 “函数”。 1.2 方法定义 / 方法定义 修饰符 返回值类型 方法名称([参数类型 形参 ...]){方法体代码;[return 返回值]; }判断是否为闰年 public class Method{ //…

JDBC使用步骤-小白入门

一.JDBC开发流程 加载并注册JDBC驱动创建数据库连接创建Statement对象遍历查询结果关闭连接,释放资源 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement;public class StandardJDBCSample {public static …

opencv进阶 ——(七)图像处理之寸照换背景

寸照换背景&#xff0c;通常指的是将个人证件照片的背景色更换为另一种颜色&#xff0c;如白色、蓝色或红色等&#xff0c;以满足不同用途的要求。例如&#xff0c;护照照片通常要求白色背景&#xff0c;而身份证照片可能需要蓝色背景。这个过程通常涉及到图像处理技术&#xf…

【国产中颖】SH79F9202U单片机驱动LCD段码液晶学习笔记

1. 引言 因新公司之前液晶数显表产品单片机一直用的是 C51单片机(SH79F9202U9)&#xff0c;本人之前没有接触过这款单片机&#xff0c;为了维护老产品不得不重新研究研究这款单片机。 10位ADC LCD的增强型8051微控制器 SH79F9202是一种高速高效率8051可兼容单片机。在同样振…

构造+模拟,CF1148C. Crazy Diamond

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 Problem - 1148C - Codeforces 二、解题报告 1、思路分析 题目提示O(5n)的解法了&#xff0c;事实上我们O(3n)就能解决&#xff0c;关键在于1&#xff0c;n的处理 我们读入数据a[]&#xff0c;代表初始数组…

继电器的选型和英应用

如何保证信号的稳定&#xff1f; 怎么消除继电器触点的电弧&#xff1f; 危害&#xff1a; 继电器的触点在动作时容易产生电弧&#xff0c;电弧具有热效应容易导致触点烧蚀粘接&#xff0c;缩短继电器的寿命&#xff0c;并且产生电弧的过程中会对外进行电磁辐射&#xff0c;…