K-Nearest-Neighbours 和 kd 树

2023-12-07 06:18
文章标签 kd nearest neighbours

本文主要是介绍K-Nearest-Neighbours 和 kd 树,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

什么是KNN?

KNN算法是没有学习过程的。它将所有已知数据存储起来,当要预测某一新数据时,使用某种距离度量选择离该新数据在特种空间中最近的K个点,根据分类决策规则,一般是多数投票规则对新数据进行分类。

 

怎样构造KNN:

1)  距离度量

LP距离。在P=1时是曼哈顿距离,P=2时是欧式距离,P为无穷大时是切比雪夫距离。也可以自己定义距离。

2)K值选择

K只选择太小,容易过拟合。K选择过大,近似误差变大。

常用的方法是从k=1开始,使用检验集估计分类器的误差率。重复该过程,每次K增值1,允许增加一个近邻。选取产生最小误差率的K。

一般k的取值不超过20,上限是n的开方,随着数据集的增大,K的值也要增大。

3)样本特征做归一化处理??(why?)

如果一个特征值域范围非常大,那么距离计算就主要取决于这个特征,从而与实际情况相悖(比如这时实际情况是值域范围小的特征更重要)。归一化可以提高预测精度。

归一化的方法

最值归一化:将所有数据映射到同一尺度;这种方式受异常值影响比较大;适用于有明显边界的情况;

x = x-xmin /xmax - xmin

均值方差归一化:另处理好的数据正态分布

怎么对测试集进行归一化:

使用训练集归一化的scaler对测试集进行处理

 

两种的区别不清楚

 

4)所有特征要做可比较的量化(why?,不明白

 

若是样本特征中存在非数值的类型,必须采取手段将其量化为数值。例如样本特征中包含颜色,可通过将颜色转换为灰度值来实现距离计算。

 

优点和缺点:

KNN算法是最简单有效的分类算法,简单且容易实现。当训练数据集很大时,需要大量的存储空间,而且需要计算待测样本和训练数据集中所有样本的距离,所以非常耗时。

KNN对于随机分布的数据集分类效果较差,对于类内间距小,类间间距大的数据集分类效果好,而且对于边界不规则的数据效果好于线性分类器。

KNN对于样本不均衡的数据效果不好,需要进行改进。改进的方法时对k个近邻数据赋予权重,比如距离测试样本越近,权重越大。(不懂,是加权?)

KNN很耗时,时间复杂度为O(n),一般适用于样本数较少的数据集,当数据量大时,可以将数据以树的形式呈现,能提高速度,常用的有kd-tree和ball-tree。

多分类问题中,KNN比SVM要好。(看了SVM再来说明为什么)

 

KD-TREE

KD-TREE

这篇关于K-Nearest-Neighbours 和 kd 树的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/464805

相关文章

Leetcode 3275. K-th Nearest Obstacle Queries

Leetcode 3275. K-th Nearest Obstacle Queries 1. 解题思路2. 代码实现 题目链接:3275. K-th Nearest Obstacle Queries 1. 解题思路 这一题的话其实逻辑上非常简单,就是维护一个距离的有序数组,不断取第k大的元素即可。 不过好死不死的题目设置成只要这么干就一定超时,因此我们不得不想办法去优化算法复杂度,但说白

python K-Nearest Neighbor KNN算法

1、最初的邻近算法,分类算法,基于实例的学习,懒惰学习。 2、算法步骤:  a、为了判断未知实例类别,选择所有已知的实例作为参考 b,选择参数k c,计算未知实例和所有已知实例的距离 d,选择最近k个已知实例 e,根据少数服从多数,让未知实例归类为k个中最多的类别 公式:E(x,y)=(xi-yi)^2求和之后再开方 import mathdef ComputeEuclidean

【机器学习】K近邻(K-Nearest Neighbors,简称KNN)的基本概念以及消极方法和积极方法的区别

引言 K近邻(K-Nearest Neighbors,简称KNN)算法是一种基础的机器学习方法,属于监督学习范畴 文章目录 引言一、K近邻(K-Nearest Neighbors,简称KNN)1.1 原理详述1.1.1 距离度量1.1.2 选择k值1.1.3 投票机制 1.2 实现步骤1.3 参数选择1.4 应用场景1.5 优缺点1.5.1 优点1.5.2 缺点 1.6 k-近邻代

Educational Codeforces Round 1C. Nearest vectors(极角排序+long double 精度)

题目链接 题意:给你一堆的向量,问你向量之间的夹角最小的是那一对。 解法:极角排序,然后枚举相邻的一对就可以啦,但是坑爹的是double精度不够,使用long double 读入使用cin。。。 #include<bits/stdc++.h>using namespace std;#define LL long long#define pb push_back#define X f

poj 1330 Nearest Common Ancestors(LCA模板)

http://poj.org/problem?id=1330 题意:给出两个点,求出这两个点最近的公共祖先。 求LCA的模板题。 大致思路就是访问到某个节点时,先将它自己加入集合中,然后递归访问它的子树,同时把子树加入到集合中来。子树搜索完毕后,判断该节点是否是输入的两个节点之一,若是,并且另外一个也已标记为访问过,那么另外一个节点的祖先便是他们的LCA。 #include<stdio

kd-tree理论以及在PCL 中的代码的实现

(小技巧记录:博客园编辑的网页界面变小了使用Ctrl  ++来变大网页字体) 通过雷达,激光扫描,立体摄像机等三维测量设备获取的点云数据,具有数据量大,分布不均匀等特点,作为三维领域中一个重要的数据来源,点云主要是表征目标表面的海量点的集合,并不具备传统网格数据的几何拓扑信息,所以点云数据处理中最为核心的问题就是建立离散点间的拓扑关系,实现基于邻域关系的快速查找。 k-d树 (k-dime

KD-Tree 的一些理解--

阅读文档:Wikipedia 上的 KD Tree 。 https://en.wikipedia.org/wiki/K-d_tree 引言 In computer science, a k-d tree (short for k-dimensional tree) is a space-partitioning data structure for organizing points in a

【C++PCL】点云处理Kd-tree原理

作者:迅卓科技 简介:本人从事过多项点云项目,并且负责的项目均已得到好评! 公众号:迅卓科技,一个可以让您可以学习点云的好地方 重点:每个模块都有参数如何调试的讲解,即调试某个参数对结果的影响是什么,大家有问题可以评论哈,如果文章有错误的地方,欢迎来指出错误的地方。 目录         1.原理介绍 1.原理介绍         kd-tree是散乱点云的一种储存结构,它是一种

深入第一个机器学习算法: K-近邻算法(K-Nearest Neighbors)

本篇博文主要涉及到以下内容: K-近邻分类算法从文本文件中解析和导入数据使用Matplotlib创建扩散图归一化数值 K-近邻算法 功能: 非常有效且易于掌握。 学习K-近邻算法的思路: 首先,探讨k-近邻算法的基本理论,以及如何使用距离测量的方法分类物品。其次,使用Python 从文本文件中导入并解析数据。再次,讨论当存在多种数据源时,如何避免计算距离时可能碰到的一些常见的错误。最后,

KD-TREE 算法原理

KD-TREE 算法原理 http://www.oneie.com/index.php/qyjs/47-txcl/1532-kd-tree   本文介绍一种用于高维空间中的快速最近邻和近似最近邻查找技术——Kd- Tree(Kd树)。Kd-Tree,即K-dimensional tree,是一种高维索引树形数据结构,常用于在大规模的高维数据空间进行最近邻查找(Nearest Neighbor