加权 KNN 算法的原理与详解

加权kNN,k近邻算法的增强改进版本。

加权KNN算法

近邻算法(k-Nearest Neighbors, kNN)是一种用于分类和回归的非参数方法。它的基本思想是“看邻居”,即通过查找离目标点最近的 K 个数据点,来判断目标点的类别或数值。

举个例子,假设有一个训练集,其中有两类点:红色代表类别0,绿色代表类别1。现在有一个白色点,需要确定它的类别。我们选择k=3,计算白色点到所有红色点和绿色点的距离,选取距离最近的3个点。如果这3个点中有2个是绿色,1个是红色,我们就认为白色点属于绿色那一类,即类别1。

但是,KNN算法性能受到超参数k值选择的影响。如果k值过小,算法对离群点会更敏感;如果k值过大,邻域内可能包含过多来自其他类别的点。此外,考虑到一个普遍的认识,即:如果靠近的数据点之间在距离上差异很大,那么其中最靠近的那一个数据点更能可靠地表明对象的类别。 针对这一些情况,加权KNN算法随之诞生。

更直观的理解:

假设有以下训练集:

在这里插入图片描述

  • 红色标签表示类别0的点,绿色标签表示类别1的点。

此时,如果我们将白色点作为查询点(需要预测类别标签的点),并且将上述数据集交给一个基于KNN的分类器,分类器会基于前面提到的最邻近原则将查询点归为类别0。但是,从图中可以明显看出,该点应该更接近类别1的点。为了克服这一缺点,我们就可以使用加权kNN。

在这里插入图片描述

在加权kNN中,最近的k个点根据一个称为核函数的函数赋予权重。加权kNN的直觉是,给距离较近的点更多的权重,而给距离较远的点更少的权重。任何值随距离增加而减少的函数都可以用作加权kNN分类器的核函数,其中最简单的函数是反距离函数。

反距离函数是一种常用的加权函数,用于kNN算法中,通过距离的倒数来给近邻点赋予权重。公式如下:

w i = 1 d i w_i = \frac{1}{d_i} wi=di1

其中:

  • w i w_i wi是第 i i i 个近邻点的权重。
  • d i d_i di 是第 i i i 个近邻点到查询点的距离。

这个函数的直观理解是:距离越近的点,权重越大;距离越远的点,权重越小。这样可以更准确地反映近邻点对查询点的影响。

Python 代码实现如下:

# Python3 program to implement the 
# weighted K nearest neighbour algorithm. import math def weightedkNN(points,p,k=3): ''' This function finds classification of p using weighted k nearest neighbour algorithm. It assumes only two two classes and returns 0 if p belongs to class 0, else 1 (belongs to class 1). Parameters - points : Dictionary of training points having two keys - 0 and 1 Each key have a list of training data points belong to that p : A tuple ,test data point of form (x,y) k : number of nearest neighbour to consider, default is 3 '''distance=[] for group in points: for feature in points[group]: #calculate the euclidean distance of p from training points euclidean_distance = math.sqrt((feature[0]-p[0])**2 +(feature[1]-p[1])**2) # Add a tuple of form (distance,group) in the distance list distance.append((euclidean_distance,group)) # sort the distance list in ascending order # and select first k distances distance = sorted(distance)[:k] freq1 = 0 # weighted sum of group 0 freq2 = 0 # weighted sum of group 1 for d in distance: if d[1] == 0: freq1 += (1 / d[0]) elif d[1] == 1: freq2 += (1 /d[0]) return 0 if freq1>freq2 else 1# Driver function 
def main(): # Dictionary of training points having two keys - 0 and 1 # key 0 have points belong to class 0 # key 1 have points belong to class 1 points = {0:[(0, 4),(1, 4.9),(1.6, 5.4),(2.2, 6),(2.8, 7),(3.2, 8),(3.4, 9)], 1:[(1.8, 1),(2.2, 3),(3, 4),(4, 4.5),(5, 5),(6, 5.5)]} # query point p(x,y) p = (2, 4) # Number of neighbours k = 5print("The value classified to query point is: {}".format(weightedkNN(points,p,k))) if __name__ == '__main__': main() 

参考链接:

  • https://www.geeksforgeeks.org/weighted-k-nn/

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

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

相关文章

学习aurora64/66b.20240703

简介 The AMD LogiCORE™IP Aurora 64B/66B core是一种可扩展的轻量级高数据速率链路层协议,用于高速串行通信。该协议是开放的,可以使用AMD设备技术实现。 Aurora 64B/66B是一种轻量级的串行通信协议,适用于多千兆位链路 (如下图所示)。它…

【MATLAB源码-第139期】基于matlab的OFDM信号识别与相关参数的估计,高阶累量/小波算法调制识别,循环谱估计,带宽估计,载波数目估计等等。

操作环境: MATLAB 2022a 1、算法描述 在现代无线通信系统中,正交频分复用(OFDM)因其高效的频谱利用率、强大的抗多径衰落能力以及灵活的带宽分配等优势,成为了一种非常重要的调制技术。然而,随着无线通信…

采沙船智能监测识别摄像机

对于现代河流管理来说,采沙船智能监测识别摄像机正逐渐成为解决非法采砂和保护河流生态环境的重要工具。这类摄像机通过先进的视觉识别和数据分析技术,有效监控和管理河道上的采沙行为,对保护水域资源和改善生态环境具有显著的意义。 采沙船智…

Linux容器篇-使用kubeadm搭建一个kubernetes集群

kubernetes集群架构和组件 master节点组件 kube-apiserver:Kubernetes API,集群的统一入口,各组件的协调者,以RESTful API提供接口服务,所有对象资源的增删改查和监听操作都交给APIserver处理后再交给Etcd存储。 kube…

学习springAOP

第三章 Spring AOP 第一节 AOP 简介 1. 概念 AOP全称为Aspect Oriented Programming,表示面向切面编程。何为切面呢? 由此可以得出,切面是一种将那些与业务无关,但业务模块都需要使用的功能封装起来的技术。这样便于减少系统的…

昇思25天学习打卡营第4天|应用实践

昇思25天学习打卡营第4天 文章目录 昇思25天学习打卡营第4天基于 MindSpore 实现 BERT 对话情绪识别模型简介环境配置数据集数据加载和数据预处理input_idsattention_mask 模型构建模型验证模型推理自定义推理数据集 打卡记录 基于 MindSpore 实现 BERT 对话情绪识别 模型简介…

奥比中光astra_pro相机使用记录

一、信息获取 1、官网 用于了解产品信息 http://www.orbbec.com.cn/sys/37.html 2、开发者社区 咨询问题下载开发部https://developer.orbbec.com.cn/ 二 、windowvs19 1、相机型号 orbbec_astro_pro 根据对应的型号找到需要的包工具 踩坑1,因为这个相机型号…

第20章 Mac+VSCode配置C++环境

1. 下载VSCode VSCode下载地址在mac终端里输入xcode- select --install命令,根据提示安装xcode工具。 2. 安装插件(4个) 打开VScode,点击应用右侧菜单栏 C/C(必装) Code Runner(必装&#xf…

UCOS-III 任务调度与就绪列表管理

01. 就绪优先级位图 在实时操作系统中,任务调度的效率至关重要。UCOS-III通过就绪优先级位图来快速查找最高优先级的就绪任务,从而实现高效调度。就绪优先级位图是一个按位表示的结构,每个位代表一个优先级,当某个优先级上有任务就…

【FFmpeg】avcodec_open2函数

目录 1. avcodec_open21.1 编解码器的预初始化(ff_encode_preinit & ff_decode_preinit)1.2 编解码器的初始化(init)1.3 释放编解码器(ff_codec_close) FFmpeg相关记录: 示例工程&#xff…

Windows编程之多线程事件对象(Event Object)用法详解

目录 一、前言 二、基础用法 三、API详解 1.创建事件对象 2控制事件状态 3.等待事件对象: 四、实战案例 1.案例描述 2.代码设计 3.总设计代码 4.运行结果 一、前言 事件对象(Event Object)是我们在大型项目中,进行多线…

竞赛选题 医学大数据分析 - 心血管疾病分析

文章目录 1 前言1 课题背景2 数据处理3 数据可视化4 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于大数据的心血管疾病分析 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! &#x1f9…

AI绘画Stable Diffusion 解锁精美壁纸创作:利用SD与LLM定制你的专属壁纸,AI副业变现指南!

大家好,我是画画的小强 今天给大家分享一下用AI绘画Stable Diffusion 制作精美手机壁纸,这也可能是当前最快AIGC变现的一种途径。虽然本文的主题为手机壁纸,当调整不同的比例的分辨率宽高比例,就可以直接复用到手机、电脑和平板、…

机器学习原理之 -- 支持向量机分类:由来及原理详解

支持向量机(Support Vector Machine, SVM)是统计学习理论的一个重要成果,广泛应用于分类和回归问题。SVM以其高效的分类性能和良好的泛化能力在机器学习领域中占据重要地位。本文将详细介绍支持向量机的由来、基本原理、构建过程及其优缺点。…

LVS负载均衡群集部署之——DR模式的介绍及搭建步骤

一、LVS-DR集群介绍1.1 LVS-DR 工作原理1.2 数据包流向分析1.3 LVS-DR 模式的特点1.4 LVS-DR中的ARP问题1.4.1 问题一1.4.2 问题二二、构建LVS-DR集群2.1 构建LVS-DR集群的步骤(理论)1.配置负载调度器(192.168.80.30)(…

5分钟教你用AI把老照片动起来,别再去花49块9的冤枉钱了

文章目录 需要的工具 最近,AI视频在各大平台上,又火了。 只是火的形式,变成了将老照片动起来,打情感牌,或者做很多经典电视剧的再整活。 直接把可灵的生成时间,从以前的4分钟,生生的干成了20分钟…

鸿蒙应用笔记

安装就跳过了,一直点点就可以了 配置跳过,就自动下了点东西。 鸿蒙那个下载要12g个内存,大的有点吓人。 里面跟idea没区别 模拟器或者真机运行 真机要鸿蒙4.0,就可以实机调试 直接在手机里面跑,这个牛逼&#xf…

国标GB/T 28181详解:国标GBT28181-2022 SIP服务器发起广播的命令流程

目录 一、定义 二、作用 1、实现信息的集中管理和分发 (1)信息集中 (2)信息分发 2、提高信息传输的可靠性和效率 (1)可靠性 (2)提高效率 3、支持多种设备和系统的互通 &am…

mongdb学习与使用

1. 基础概念 MongoDB简介: MongoDB是一个基于文档的NoSQL数据库,具有高性能、高可用性和易扩展性。数据存储在类似JSON的BSON格式中。 基本术语: Database(数据库): 集合的容器。Collection(集合…

国产强大免费WAF, 社区版雷池动态防护介绍

雷池WAF,基于智能语义分析的下一代 Web 应用防火墙 使用情况 我司于2023年4月23日对雷池进行测试,测试一个月后,于2023年5月24日对雷池进行正式切换,此时版本为1.5.1。 里程碑纪念 后续一直跟随雷池进行版本升级,当前…