机器学习 KD树_递归搜索(matlab实现)

KD树在计算机科学和机器学习领域中有着广泛的应用,它可以用于解决各种问题,如最近邻搜索、范围查询和聚类等。本文将介绍KD树的基本概念及其在Matlab中的应用。 KD树是一种二叉树结构,它可以对k维数据进行快速的查找和排序。分割的方法是通过选择一个轴来实现的,通常选择方差最大的轴作为分割轴。例如,在二维空间中,如果有很多点的x轴方差比y轴方差大,则选择x轴作为分割轴。在Matlab中,我们可以轻松地实现KD树的构建和最近邻搜索。除了最近邻搜索,KD树还可以应用于范围查询和聚类等问题。因此,掌握KD树的原理和应用是非常有价值的。KD树在计算机科学和机器学习领域中有着广泛的应用,它可以用于解决各种问题,如最近邻搜索、范围查询和聚类等。% 计算节点和目标点的距离。 阅读详情

思路

第二个版本:链接

KD树基本思路:
建立KD树(Kd_Tree_Create)
递归搜索:回溯搜索的起点(Kd_Tree_Search)
回溯搜索:收敛到全局最近点(暂未实现)

效果

仅用递归搜索效果如下:
请添加图片描述

代码

mian

clear all;
clc;
%% 数据导入
Dataset=csvread("iris_dataset.csv");
rows=150;
columns=5;

%% 数据分割
Train_set=Dataset(1:120,:);
Test_set=Dataset(121:150,:);

%% kd树生成
%1:columns列为属性和类别, columns+1列节点存活状态
global Kd_Tree;
Kd_Tree_Create(Train_set);

%% 递归搜索 测试
global stack_point;
size_Kd_Tree=size(Kd_Tree);
scores=0;
for i=1:30
    test_x=Test_set(i,1:columns-1);
    Kd_Tree_Search(1,size_Kd_Tree(1),columns-1,1,test_x);
    if (Kd_Tree(stack_point(1),columns)==Test_set(i,columns))
        scores=scores+1;
    end
    stack_point=[];
end
disp("递归搜索准确率:"+scores/30);

%% 递归 & 回溯搜索 测试

Kd_Tree_Create

function [] = Kd_Tree_Create(Dataset)
%二叉树数据结构在c语言中容易表示,可在matlab中却不那么容易
%但是c语言需要自己造轮子(sortrows()用c得写死我), matlab有现成的, 所以思考一下如何在matlab中表示二叉树呢
%参考大堆小堆利用数组表示二叉树, 从而避开指针构建kdtree(哇噢, 感觉自己就是个小机灵鬼诶)
%给每个节点添加下标以实现父子访问
%提示:节点下标为i, 左孩子下标为2*i,左孩子下标为2*i+1
%因为kdtree不是完全二叉树, 所以需要增加状态信息栏表示某节点是否为空
%好了, 开整吧

%Dataset共有rows行数据,1:columns-1列为属性,columns列为类别
size_Dataset=size(Dataset);
recursive(Dataset,1,1,size_Dataset(1),size_Dataset(2)-1);
end

recursive

function [] = recursive(Dataset,pos,x_i,rows,columns)
%Dataset:需要二分的数据集
%rows:需分类的个体数
%columns:用于分类的属性数
%pos:Kd_Tree插入位置
%x_i:排序依据
global Kd_Tree;
if(rows>1)
    %排序
    Dataset=sortrows(Dataset,mod(x_i-1,columns)+1);
    %二分
    Divi_Index=fix(rows/2);
    Kd_Tree(pos,1:columns+1)=Dataset(Divi_Index+1,:);
    Kd_Tree(pos,columns+2)=1;
    %递归
    recursive(Dataset(1:Divi_Index,:),2*pos,x_i+1,Divi_Index,columns);
    recursive(Dataset(Divi_Index+2:rows,:),2*pos+1,x_i+1,rows-Divi_Index-1,columns);
else
    if(rows==1)
        Kd_Tree(pos,1:columns+1)=Dataset;
        Kd_Tree(pos,columns+2)=1;
    else
        Kd_Tree(pos,columns+2)=0;
    end
end

end

Kd_Tree_Search

function [] = Kd_Tree_Search(current_point,rows,x_dim,i_x,test_x)
global Kd_Tree;
global stack_point;
stack_point=[current_point stack_point];
if(Kd_Tree(current_point,i_x)<=test_x(1,i_x))%进入右子节点
    if(2*current_point+1<=rows && Kd_Tree(2*current_point+1,x_dim+2)==1)
        Kd_Tree_Search(2*current_point+1,rows,x_dim,mod(i_x,x_dim)+1,test_x)
    else%父与右子之间 && 右子为空
    end
else%进入左子节点
    if(2*current_point<=rows && Kd_Tree(2*current_point,x_dim+2)==1)
        Kd_Tree_Search(2*current_point,rows,x_dim,mod(i_x,x_dim)+1,test_x)
    else%父与左子之间 && 左子为空
    end
end


end
12 探索MATLAB中的KD树:高效的K近邻搜索与空间分析 KD树是一种二叉树数据结构,用于组织多维数据,其中每个节点代表一个数据点。它是一种分割空间的方法,可以将空间划分成多个子空间,以便在搜索和分析中高效地定位数据点。递归划分:KD树使用递归的方式将数据点划分成左子树和右子树,以便快速定位查询点。坐标轴对齐划分:每次划分都选择一个坐标轴进行分割,这保证了子空间的对齐性。高效的K近邻搜索:KD树可用于高效地查找K近邻数据点,即与查询点距离最近的K个数据点。机器学习:K近邻算法的实现。图像检索:寻找相似图像。数据挖掘:在多维数据集中执行空间分析。 阅读详情

相关推荐

结合KD-TREE与BBF算法的Matlab实战项目

KD-TREE(K-Dimensional Tree)是一种用于组织和查询点在K维空间中分布的数据结构。它是一种二叉树,用于处理多维数据中的搜索问题,尤其是当数据点需要进行范围查询、最近邻搜索或插值时。在机器学习、计算机图形学、空间数据库和数据压缩等领域有广泛的应用。在机器学习中,KD-TREE常用于分类、回归和其他各种优化问题,如K-近邻(K-Nearest Neighbors, KNN)算法中作为快速检索最近邻点的基础。

weixin_35794316的博客 717

Matlab构建KD树

机器学习、构建kd树

qq_36638788的博客 1391

kd-树matlab程序

完全使用matlab编写的kd-tree程序。 完全使用matlab编写的kd-tree程序。 完全使用matlab编写的kd-tree程序。 完全使用matlab编写的kd-tree程序。

使用matlab建立Kd-tree并进行k-NN查询

使用matlab对输入数据建立Kd-tree并通过Kd-tree进行k-NN查询。 k-NN查询的主要算法思路来自【量化课堂】kd 树算法之详细篇 clear; close all; clc; % 生成数据 data = [2 3; 5 4; 9 6; 4 7; 8 1; 7 2]; % 给数据标号 for i = 1: size(data,1) data(i,3) = i; end % 建立Kd树 Kd_tree = Kd_tree_create(data)

john_xia的博客 6319

matlab中kdtree的搜索近邻点

主要包括对多有点搜索近邻点以及针对单个点搜索近邻点两种情况,给出详细的案例说明

matlab中的kdtree实现:代码中包含了matlab中kd树的实现-matlab开发

matlab 的大部分 kdtree 代码都是通过 mex 文件实现的。 我决定提出一个纯粹基于 matlab 的实现,所以这里是......代码显然预计会比那里的一些 c/c++ 实现慢,但它在 matlab 中实现的事实可能会使它在某些情况下很有用。 Matlab 没有指针,因此我通过使用全局单元格数组来模拟指针功能。 我将不胜感激对我提交的任何反馈......

【Matlab】基于KDtree的最近邻搜索和范围搜索

rangesearch() —— 根据给定k-维数据集,返回指定距离范围内的所有数据点。摘要:介绍Matlab的rangesearch()函数和knnsearch()函数。knnsearch() —— 根据给定k-维数据集,返回最近的K个数据点。

我的乌托 1045

kd树建立 MATLAB源代码

用于建立kd树数据结构,对于做图像处理的人应该很有用

机器学习 KD树_递归_回溯_搜索(matlab实现)

文章目录思路效果待优化代码mianKd_Tree_CreaterecursiveKd_Tree_SearchKd_Tree_Recall_Search 思路 第一个版本:链接 KD书基本思路: 建立KD树(Kd_Tree_Create) 递归搜索:回溯搜索的起点, 建立回溯栈(Kd_Tree_Search) 回溯搜索:从起点向着根节点回溯 设 测试节点:test_x 当前最优节点:predicted_x_point 当前最短距离:predicted_x_distance 当前回溯节点:cuurent_poi

dc12499574的博客 1839

kdtree11.zip_KD_MATLAB kd_kd树_kd树 MATLAB_matlab kd算法

用matlab编写的关于Kd树算法,很实用的

TouchGFX在STM32上的移植全过程:超详细版指南

深入讲解将TouchGFX集成到STM32开发环境的每一步,涵盖配置、驱动适配与UI调试。无论是初学者还是进阶开发者,都能快速掌握TouchGFX在嵌入式平台的应用技巧。

weixin_42443533的博客 600

机器学习 KD树生成(matlab实现)

文章目录思路效果代码mianKd_Tree_Createrecursive 思路 %二叉树数据结构在c语言中容易表示,可在matlab中却不那么容易 %但是c语言需要自己造轮子(sortrows()用c得写死我), matlab有现成的, 所以思考一下如何在matlab中表示二叉树呢 %参考大堆小堆利用数组表示二叉树, 从而避开指针构建kdtree(哇噢, 感觉自己就是个小机灵鬼诶) %给每个节点添加下标以实现父子访问 %提示:节点下标为i, 左孩子下标为2i,左孩子下标为2i+1 %因为kdtree不是完

dc12499574的博客 2942

保姆级教程:用STM32F103C8T6和MAX6675搞定K型热电偶测温(附模拟/硬件SPI双版本代码)

本文提供STM32F103C8T6与MAX6675实现K型热电偶高精度测温的保姆级教程,涵盖硬件连接、SPI驱动实现及模拟SPI方案,并附双版本代码。详细解析温度数据读取、处理及常见问题排查,助力工业控制、实验室设备等场景的稳定测温系统搭建。

weixin_30765505的博客 587

k近邻法matlab_机器学习算法推导&手写实现08——k近邻和kd树实现

我们知道k近邻法(k-nearest neighbor, KNN)是一种基本的机器学习算法,早在1968年就被提出。KNN算法简单、直观,是最著名的“惰性学习”算法,不具有显示的学习过程。K近邻推导与kd树过程我们可以用文字简单描述下KNN算法:给定一个训练数据集T,对于新的目标实例x,我们在训练集T中找到与实例x最邻近的k个实例,这k个实例大多属于哪一类,目标实例x就被分为这个类。k近邻图示用数...

weixin_35771315的博客 333

Unity分包下载实战:AssetBundle+CDN+热更新全链路指南

分包下载是移动应用资源管理的核心技术,本质是将大体积安装包拆解为按需加载的独立资源单元,以解决用户安装意愿低、首屏启动慢、热更新不可控等关键问题。其底层依赖资源打包机制(如Unity AssetBundle)、全球分发网络(CDN)与安全热更新策略三者协同。AssetBundle提供资源隔离与依赖管理能力,CDN保障低延迟高可用下载,而热更新策略则决定版本控制、灰度发布与异常恢复的工程鲁棒性。该方案广泛应用于中重度游戏、大型工具类App及需要频繁内容迭代的商业项目,直接提升次日留存、过审成功率与用户在线时长

weixin_29762151的博客 354

从AXI到CHI:深入解析基于Credit的流量控制如何优化NoC设计

本文深入解析了从AXI握手式流控到CHI基于Credit的流量控制机制的演进。通过对比传统流控的瓶颈,详细阐述了Credit机制如何通过信用预分配和记账系统,有效解决FIFO气泡、时序收敛等难题,从而优化NoC设计的带宽利用率、降低延迟并提升系统可扩展性。

weixin_29227585的博客 522

C#实现KNN算法

KNN算法的C#代码,上一篇博客中的C#创建KD树的程序中的算法是模仿MATLAB的KDTree的程序思路 这次按照李航老师的《统计学习方法》中的思路,写一个C#程序,其中创建KD树的分割的维度并不是轮寻,而是按照数据的范围来找的 using System; using System.Collections.Generic; using System.Linq; namespac

Binbin的技术博客 2215

openEuler Embedded新增软件包及在线安装软件方法

openEuler Embedded是基于Yocto构建的嵌入式操作系统,默认不包含dnf/apt软件包管理器,主要使用rpm格式。新增软件需通过manifest文件检查是否集成,未集成则需适配新配方。对于在线安装需求,可采用轻量级容器方案:通过isulad运行openEuler服务器版容器镜像,在容器内使用dnf命令安装软件(如Nginx),实现服务器生态兼容。部署前提包括设备支持、存储空间(≥10GB)和网络连接,需先安装并启动isulad服务。这种方法结合了嵌入式系统的轻量化特性和服务器系统的软件管理

专注嵌入式开发与 Linux 系统应用实战,分享芯片驱动、设备调试、系统工具开发干货。 1225

【路径规划】快速探索随机树算法(Matlab实现)

传统的最近邻搜索算法,如线性扫描或KD树,可能在大规模数据集上效率低下。构建阶段:随机选择数据集的一个子集,并在该子集上构建一棵随机树。搜索阶段:对于给定的查询点,通过在随机树上进行递归搜索,找到最接近的叶子节点,并检查该叶子节点中的候选点以确定最终的近似最近邻。快速探索随机树算法通过构建多棵随机树来加速最近邻搜索过程,具有较好的效率和可扩展性,适用于处理大规模数据集的近似最近邻搜索问题。文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。行百里者,半于九十。

2301_79155639的博客 446

MATLAB代码实现了船舶航线优化的功能,使用混合遗传算法(结合模拟退火算法)来寻找从大连港到格拉斯通港的最优航线,同时考虑了船舶的参数、气象数据(风速、风向、有效波高、波浪阻力系数等)对航行的影响

这段MATLAB代码主要实现了船舶航线优化的功能,使用混合遗传算法(结合模拟退火算法)来寻找从大连港到格拉斯通港的最优航线,同时考虑了船舶的参数、气象数据(风速、风向、有效波高、波浪阻力系数等)对航行的影响。通过以上步骤,该代码能够找到一条在考虑船舶性能和气象条件下,从大连港到格拉斯通港的较优航线,最小化燃油消耗和航行时间的加权和。

AI的内部世界的博客 513

AUTOSAR从入门到精通-复杂设备驱动(CDD)

CDD是复杂设备驱动的首字母缩写主要为驱动程序或复杂驱动程序,但不限于驱动程序。复杂驱动程序是一种未被AUTOSAR标准化的软件实体,可以通过AUTOSAR接口和/或基本软件模块api访问。 CDD是位于基础软件复杂驱动层的特定模块,与标准BSW模块或Rte交互。 CDD可能需要与分层软件体系结构的模块连接 分层软件架构的模块可能需要连接到CDD CDD可能需要通过Rte连接swc。

getusushu的博客 4192
上一篇: linux下screen基本用法
下一篇: Leetcode题库 2028.找出缺失的观测数据(C实现)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值