KNN算法及其改进

article/2025/9/7 7:57:34

KNN算法优缺点

  • 优点
    (1) 精度高
    (2) 对异常值不敏感:某个异常值对整个结果不造成影响;
    (3) 无数据输入假定:无数据的独立性等假设;
  • 缺点
    (1) 计算复杂度高:因为要计算的点需要与所有点计算距离,所以复杂度很高;
    (2) 空间复杂度高:因为需要加载所有的样本;

适应的数据范围

  • 数值型和标称型(是或者否)

算法原理
K值不同,直径大小也不同
K值选择

  • 如果选择较小的K值
    – 近似误差会减小(针对训练集),估计误差会增大(针对测试集或验证集);
    – 对噪声比较敏感;
    – 容易过拟合(模型复杂),泛化能力差;
  • 如果选择较大的K值
    – 近似误差增大,估计误差会减小;
    – 整体模型变得简单;

距离选择

  • 欧式距离:对异常值更敏感
  • 曼哈顿距离
  • 马氏距离:可以消除样本间的相关性,协方差矩阵可以降低样本差异性;
    在这里插入图片描述

算法改进

  • KD树
    – 对K维空间的实例点进行存储以便快速检索;
    – 是二叉树,相当于不断用垂直与坐标轴的超平面将K维空间切分构成一系列K维超矩形区域;
  • 例子
    在这里插入图片描述
    以中值作为切割点,对x轴从小到大排序
    (2,3), (4,7), (5,4), (7,2), (8,1), (9,6) 此时x轴的中值位置为(7,2);(2,3), (4,7), (5,4)作为左节点,(8,1), (9,4)作为右节点,分别对y轴切分;
  • 最终树结构如下:在这里插入图片描述
  • kd树查找(假设查找(2,4.5)节点)
    通过KD树,找到最后一个叶子节点为(4,7),与目标查找点的距离为3.202;回溯到根节点(5,4),计算其与查找点之间的距离为3.041,小于3.202,所以“当前最近邻点”变成(5,4);
    以目标点(2,4.5)为圆心,以目标点(2,4.5)到“当前最近邻点”(5,4)的距离(即3.041)为半径作圆,如上图所示。可见该圆和y = 4超平面相交,所以需要进入(5,4)左子空间进行查找,即回溯至(2,3)叶子节点;
    (2,3)距离(2,4.5)比(5,4)要近,所以“当前最近邻点”更新为(2,3),最近距离更新为1.5;
    再回溯到(7,2),以(2, 4.5)为圆心,以1.5为半径的圆不会与x = 7超平面交割,因此不用进入(7,2)右子空间进行查找。
  • kd树缺点:
    在kd tree 中,我们看到一个导致性能下降的最核心因素是因为kd树的平面是一个个的方形,求最近邻时使用的是圆形。方形平面跟圆形相交的可能性是极高的,如果方形的交汇点多的话,圆形和几个平面相交的可能性就变得更大。这样,凡是相交的平面,都需要进行检查,大大的降低运行效率。在维度较高时,这种性能降低十分明显。
  • ball tree特点
    ball tree抛弃了kd树画的方形,而建立球形,去掉棱角。简而言之,就是使用超球面而不是超矩形划分区域。
  • ball tree的构造方式
    所有的数据先构成一个最大的球体。从球中选择一个离球的中心最远的点,然后选择第二个点离第一个点最远。将圆中所有离这两个点最近的观测点都赋给这两个簇的中心,而后计算每一个簇的中心点和包含所有其所属观测点的最小半径。不断递归得到最终结果如上图C所示。在上图B中所示数据结构中A,B,C , D, E非叶子节点存储了球的中心点和半径。
  • ball tree查找方式
    先寻找叶子节点,并计算叶子节点和目标点的距离,此值确定目标最小距离上限。根据构造方式可知,可以根据目标点计算出其叶子节点。此时,唯一需要验证的是其兄弟节点的距离,如果小于上限就更新最近目标点。
  • 外部库使用(sklearn)

http://chatgpt.dhexx.cn/article/6kZK75mq.shtml

相关文章

机器学习算法-KNN代码实现

机器学习算法-KNN代码实现 一、KNN算法初步理解二、代码实现1.数据集处理2.创建model3.可视化 总结 一、KNN算法初步理解 统计学习方法书上的解释:给定一个训练数据集,对于新的输入实例,在训练数据集中找到与该实例最邻近的k个实例&#xff…

【数据挖掘基础】——KNN算法+sklearn代码实现(6)

🤵‍♂️ 个人主页:@Lingxw_w的个人主页 ✍🏻作者简介:计算机科学与技术研究生在读 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 目录 介绍算法的例子 KNN算法原理

KNN的优化算法1:距离加权

参考文章:https://www.cnblogs.com/bigmonkey/p/7387943.html 对参考文章中最后一部分说的有问题的地方进行了修改。 权值加权:为每个点的距离增加一个权重,使得距离近的点可以得到更大的权重,在此描述如何加权。 反函数 该方法最…

机器学习之深入理解K-means、与KNN算法区别及其代码实现

K-means方法是一种非监督学习的算法,它解决的是聚类问题。 1、算法简介:K-means方法是聚类中的经典算法,数据挖掘十大经典算法之一;算法接受参数k,然后将事先输入的n个数据对象划分为k个聚类以便使得所获得的聚类满足聚类中的对象…

KNN算法代码实现

原理: KNN 算法也叫K近邻算法。假设给定一个训练数据集,其中的实例类别已定。它是通过找到一个数据集中与目标数据最近的K个邻居,然后通过多数表决等方式来预测目标数据的分类结果进行预测。 三要素: 距离度量、K值、分类决策规…

KNN中的优化算法KD-tree

我们知道KNN是基于距离的一个简单分类算法,熟悉KNN的都知道,我们要不断计算两个样本点之间的距离,但是,试想一下,如果数据量特别大的时候,我们要每个都计算一下,那样计算量是非常大的&#xff0…

KNN算法代码

一、K近邻算法 KNN是一种监督学习类别的算法,全称(K-NearestNeighbor)直译为K个最近的邻居,是一种聚类算法。该算法认为我们在判断一个物体的类别可以根据与他非常相似的K个物体的类别(这K个物体的类别是已知的&#x…

KNN数据缺失值填充(附源码和数据)不调用包

KNN估计 数据缺失值填充—KNN估计一、基本思想二、步骤1.导入数据2.查看空缺值3.取出要分析的数据4.计算平均值5.计算标准差6.规范化7.计算欧几里得距离8.最优解9.画图 总结 数据缺失值填充—KNN估计 运行环境 python3.6 jupyter notebook 一、基本思想 先将数据标准化&…

数据挖掘——KNN算法的实现

👨‍💻作者简介:练习时长两年半的java博主 📖个人主页:君临๑ 🎁 ps:点赞是免费的,却可以让写博客的作者开心好几天😎 文章目录 一、k-最近邻分类算法介绍 二、k-NN的特…

KNN算法调优

1.所用方法: 交叉验证与网格搜索 交叉验证(为了让被评估的模型更加精确可信): 所有训练集数据分成N等分,几等分就是几折交叉验证 网格搜索:调参数 K-近邻:超参数K 2.API: sklearn.model_selection.GridSearchCV: CV即cross validation…

计算机编程—必备基础知识点

目录: 1. 编程语言1.1 编程1.2 计算机语言1.3 编程语言1.4 翻译器1.5 编程语言和标记语言区别 2. 计算机基础2.1 计算机组成2.2 数据存储2.3 数据存储单位2.4 程序运行 1. 编程语言 1.1 编程 编程:就是让计算机为解决某个问题而使用某种程序设计语言编…

计算机概论--计算机基础知识快速入门

0.前言1.计算机:辅助人脑的好工具 1.1计算机硬件的五大单元1.2CPU的种类1.3接口设备1.4运作流程 2.个人计算机架构与接口设备 2.1CPU2.2内存2.3显卡2.4硬盘与存储设备2.5主板 3.软件程序执行 3.1机器程序与编译程序3.2操作系统 3.2.1操作系统内核3.2.2系统调用 3.3小…

0基础如何开始学习计算机知识?

一、计算机的基本操作 计算机中只有文件和文件夹 计算机中,只有两样东西,文件和文件夹。 文件夹:本身不存储数据内容。文件夹是用来组织和管理文件的。 文件: 所有的txt文本文档,音乐,视频,图…

【电脑讲解】电脑知识入门大全,超详细电脑基础知识讲解

这是一个新坑,希望大家喜欢 电脑的基础知识大全,你确定都知道? 一、软件系统 软件系统包括:操作系统、应用软件等。应用软件中电脑行业的管理软件,IT电脑行业的发展必备利器,电脑行业的erp软件。 二、硬件系统 硬件系…

计算机知识01:计算机基础知识入门

1. 计算机运行流程 如果不是很了解电脑运行流程的话,我们可以类比一下,假设电脑是一个人体,那么每个元件对应到哪个地方呢?可以这样思考: CPU脑袋:每个人会做的事情都不一样(微指令集的差异&a…

IP地址(IP Address)

IP Address在网络中,通信节点都需要一个IP地址 以点分十进制表示,有32位二进制构成(大约43亿) 分为两个部分:网络位和主机位 网络位:代表IP地址所属的网段 主机位:代表网点上的某个节点 由子…

IP地址构成 ,以及如何求“网络地址“以及“广播地址“

IP地址(英语:IP Address, 全称:Internet Protocol Address)又称互联网协议地址。当设备连接网络,设备将被分配一个IP地址,用作标识。通过IP地址,设备间可以互相通讯,如果没有IP地址&…

电话号码对应的英语单词

问题: 电话的号码盘一般可以用于输入字母,如用2可以输入a,b,c,用3可以输入d,e,f等。 对于号码5869872,可以依次输出其代表的所有字母组合。如:jtmwtpa,jtmwtpb......... 1、您能否可以根据这样的对应关系设计一个程序&#xff…

地址的概念

前言:地址的概念 1. 地址概念及各个单位换算1.1 地址的概念1.2 单位换算1.3 举例说明,加深理解1.4 关于地址的宽度 1. 地址概念及各个单位换算 1.1 地址的概念 计算机内的数据是存储在地址里面的,地址又是以字节(Byte&#xff09…

地址的地址?

在visual studio 2019中 #include <stdio.h> #include <stdlib.h> typedef struct student { int value; struct student* next_stu; }Student; Student * creatlist(); void insertlist(Student * list,int value); int main() { Student *my_list…