算法笔记:球树

1 KD树的问题

算法笔记:KD树_UQI-LIUWJ的博客-CSDN博客

  • 在kd树中,导致性能下降的最核心因素是因为kd-tree中被分割的子空间是一个个的超方体,而求最近邻时使用的是欧式距离(超球)。
  • 超方体与超球体相交的可能性是极高的
  • 如上图所示,凡是相交的子空间,都需要进行检查,大大的降低运行效率

2 球树

  • 如果划分区域也是超球体,则相交的概率大大降低
  • ——>ball-tree通过超球体划分空间,去掉棱角,划分超球体和搜索超球体相交的概率大大降低
    • 特别在数据维度很高时,算法效率得到大大提升

 

 

3 构建球树

def fit_ball_tree:input: x, 数据点output: node,构造好的ball tree的根节点if 只有一个数据点:创建一个叶子结点node包含这一单一的点:node.pivot = x[0]node.son1 = Nonenode.son2 = Nonenode.radius = 0 #球树半径return nodeelse:让c为最宽的维度让p1,p2为该维度最两端的点让p为这个维度的中心点 = (p1+p2)/2让radius为p到x上最远点的距离让xl为左集合(距离p1更近的所有点)让xr为右集合(距离p2更近的所有点)创建带有两个孩子的node:node.pivot = pnode.label = Nonenode.son1 = fit_balltree(xl)node.son2 = fit_balltree(xr)node.radius = radiusreturn node

4 球树K近邻搜索

 

def ball_tree_search:global:Q, 缓存k个最近邻点(初始时包含一个无穷远点)q, 与Q对应,保存Q中各点与测试点的距离input: k, 寻找k个最近邻t, 测试点node, 当前节点output: 无三角不等式:若测试点到当前球的最近距离大于到Q中最远点的距离,则当前球中不可能包含待搜索的近邻点if distance(t, node.pivot) - node.radius ≥ max(q):returnif node为叶节点:将node.pivot添加到Q,并同步更新q若Q内超过k个近邻点,则移出与测试点距离最远的那个点,并同步更新qelse:递归搜索当前节点的左儿子和右儿子ball_tree_search(k,t,node.son1)ball_tree_search(k,t,node.son2)

参考内容:KNN的核心算法kd-tree和ball-tree - 简书 (jianshu.com)

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

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

相关文章

keepalived + lvs (DR)

目录 一、概念 二、实验流程命令 三、实验的目的 四、实验步骤 一、概念 Keepalived和LVS(Linux Virtual Server)可以结合使用来实现双机热备和负载均衡。 Keepalived负责监控主备服务器的可用性,并在主服务器发生故障时,将…

maven可用的插件列表

maven可用的插件列表:https://maven.apache.org/plugins/ 在插件列表页面找到自己想要了解的插件,点击进去,可以看到插件的详细信息,例如这个插件有哪些goals,goal的参数、用法、样例等,还是很有用的。 B…

​LeetCode解法汇总57. 插入区间

目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 描述: 给你一个 …

自动化测试之unittest框架

unittest 1、什么是Unittest框架? python自带一种单元测试框架 2、为什么使用UnitTest框架? >批量执行用例 >提供丰富的断言知识 >可以生成报告 3、核心要素 1).TestCase(测试用例) 2).TestSuite(测试套件)…

用Idea把SpringBoot项目打包镜像上传至docker

1、设置docker把2375端口开起来 命令查看docker装在哪里 vim docker.service 新增 -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock 2、配置Dockerfile 我在跟pom同一层 3、配置docker-maven-plugin <plugin><groupId>com.spotify</groupId><arti…

大数据项目实战(Sqoop安装)

一&#xff0c;搭建大数据集群环境 1.4 Sqoop安装 1.sqoop安装 &#xff08;1&#xff09;上传安装包 &#xff08;2&#xff09;解压安装包 tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /export/servers &#xff08;3&#xff09;重命名 mv sqoop-1.4.6.b…

IntelliJ IDEA 2023.2.1使用Git时弹出“使用访问令牌登录”问题解决

这里写目录标题 一、内网Git环境GitLabGogsGitea 二、外网Git环境GitHubGitee 升级为IntelliJ IDEA 2023.2.1后&#xff0c;使用Git时弹出“使用访问令牌登录”的窗口&#xff0c;习惯使用Git帐号密码登录的用户&#xff0c;面对这个突如其来的弹窗真的很懵。 一、内网Git环境 …

RabbitMQ快速上手及讲解

前言&#xff1a;在介绍RabbitMQ之前&#xff0c;我们先来看下面一个场景&#xff1a; 1.1.1.1 异步处理 场景说明&#xff1a; 用户注册后&#xff0c;需要发注册邮件和注册短信&#xff0c;传统的做法有两种 1.串行的方式 (1)串行方式&#xff1a;将注册信息写入数据库后&a…

Unity——资产包(Asset Bundles)

对很多单机游戏来说&#xff0c;游戏的所有资源往往是与游戏本体一同发布的&#xff0c;资源部西药独立出来。但对于大型商业项目来说&#xff0c;游戏产品还需要再发布之后进行维护和更新&#xff0c;这就引出了Unity资产包的概念 一、资产包&#xff08;Asset Bundles&#x…

【排序】快排非递归

模拟递归的下标&#xff0c;让他们入栈

用Python轻松实现Word文档到PDF的批量转换

Word文件&#xff08;Doc、Docx&#xff09;和PDF文件都是使用广泛的文档格式。其中&#xff0c;Word文档格式在编辑内容时优势明显&#xff0c;能够满足各种编辑需求。但想要保证文档的完整和格式的一致&#xff0c;以及使文档有良好的跨平台兼容性&#xff0c;PDF格式则是更好…

【Linux】DNS系统,ICMP协议,NAPT技术

遏制自己内心的知识优越感&#xff0c;才能让你发自内心的去尊重他人&#xff0c;避免狂妄自大&#xff0c;才能让你不断的丰富自己的内心。 文章目录 一、DNS系统1.DNS服务器返回域名对应的ip2.使用dig工具分析DNS过程3.浏览器中输入url后发生的事情&#xff1f; 二、ICMP协议…

Hibernate(Spring Data)抓取策略

文章目录 示例代码放到最后&#xff0c;使用的是Springboot 项目1. 简介2. Hibernate抓取策略分类2.1 即时加载&#xff08;Eager Loading&#xff09;2.2 延迟加载&#xff08;Lazy Loading&#xff09;2.3 子查询加载&#xff08;Subselect Loading&#xff09;2.4 基于批处理…

使用spring自带的发布订阅来实现发布订阅

背景 公司的项目以前代码里面有存在使用spring自带发布订阅的代码&#xff0c;因此稍微学习一下如何使用&#xff0c;并了解一下这种实现方式的优缺点。 优点 实现方便&#xff0c;代码方面基本只需要定义消息体和消费者&#xff0c;适用于小型应用程序。不依赖外部中间件&a…

1992-2022年全国31省市产业升级、产业结构高级化水平面板数据(含原始数据和计算过程)

1992-2022年全国31省市产业升级、产业结构高级化水平面板数据&#xff08;含原始数据和计算过程&#xff09; 1、时间&#xff1a;1992-2022年 2、指标&#xff1a;地区生产总值、第一产业增加值、第二产业增加值、第三产业增加值、第一产业占GDP比重、第二产业占GDP比重、第…

Excel·VBA二维数组组合函数、组合求和

目录 1&#xff0c;二维数组组合函数举例 2&#xff0c;组合求和 之前的文章《ExcelVBA数组组合函数、组合求和》和《ExcelVBA数组排列函数》&#xff0c;都是针对一维数组的组合和排列 二维数组组合&#xff1a;对一个m行*n列的二维数组&#xff0c;每行抽取1个元素进行组合&a…

PyCharm切换虚拟环境

PyCharm切换虚拟环境 为了满足不同任务需要不同版本的包&#xff0c;可以在Anaconda或者Miniconda创建多个虚拟环境文件夹&#xff0c;并在PyCharm下切换虚拟环境。 解决方案 1、打开Ananconda Prompt 2、创建自己的虚拟环境 格式&#xff1a;conda create -n 虚拟环境名字…

部署你自己的导航站-dashy

现在每天要访问的网页都太多了&#xff0c;尽管chrome非常好用&#xff0c;有强大的标签系统。但是总觉的少了点什么。 今天我就来分享一个开源的导航网站系统 dashy。这是一个国外的大佬的开源项目 github地址如下&#xff1a;https://github.com/Lissy93/dashy 来简单说一下…

机器学习和数据挖掘02-Gaussian Naive Bayes

概念 贝叶斯定理&#xff1a; 贝叶斯定理是概率中的基本定理&#xff0c;描述了如何根据更多证据或信息更新假设的概率。在分类的上下文中&#xff0c;它用于计算给定特征集的类别的后验概率。 特征独立性假设&#xff1a; 高斯朴素贝叶斯中的“朴素”假设是&#xff0c;给定…

android studio安装教程

1、android studio 下载 下载网址&#xff1a;Download Android Studio & App Tools - Android Developers 2、开始安装 因为不需要每次连接手机进行调试&#xff0c;android studio给我们提供了模拟器调试环境。 一般选择自定义安装&#xff0c;这样可选sdk以及下载路径…