KNN最近邻算法分析及实现(Python实现)

news/2024/4/20 20:53:11/文章来源:https://blog.csdn.net/weixin_42491720/article/details/128097385

KNN最近邻算法分析及实现(代码附录后文)

  • 1 KNN算法简介
  • 2 KNN基本原理
  • 3 简单实现KNN分析
  • 代码附录(Python):
  • 呆,站住别跑,留个赞,给个关注嘛都看到这了

Author: Nirvana Of Phoenixl

Proverbs for you:There is no doubt that good things will always come, and when it comes late, it can be a surprise.
(送给你的)

1 KNN算法简介

  最近邻(K-Nearest Neighbor,KNN)算法,是著名的模式识别统计学方法,在机器学习分类算法中占有相当大的地位。它是一个理论上比较成熟的方法。既是最简单的机器学习算法之一,也是基于实例的学习方法中最基本的,又是最好的文本分类算法之一。

  K近邻法(K-Nearest Neighbor, KNN)是一种基本分类与回归方法,其基本做法是:给定测试实例,基于某种距离度量找出训练集中与其最靠近的K个实例点,然后基于这K个最近邻的信息来进行预测

  通常,在分类任务中可使用“投票法”,即选择这K个实例中出现最多的标记类别作为预测结果;在回归任务中可使用“平均法”,即将这K个实例的实值输出标记的平均值作为预测结果;还可基于距离远近进行加权平均或加权投票,距离越近的实例权重越大。

2 KNN基本原理

  KNN最邻近分类算法的实现原理:为了判断未知样本的类别,以所有已知类别的样本作为参照,计算未知样本与所有已知样本的距离,从中选取与未知样本距离最近的K个已知样本,根据少数服从多数的投票法则(majority-voting),将未知样本与K个最邻近样本中所属类别占比较多的归为一类。

K近邻算法的主要任务是通过判断距离来选取未知样本,它包含的又一下核心公式: 
在这里插入图片描述

其中xi表示样本集
通过未知样本和已知样本的距离来判断取舍,主要是根据闵可夫斯基距离(LP)距离,其距离可以表示为:
在这里插入图片描述
其中xi,xj表示两个样本,n表示样本数,l表示维度,p表示参数其值取不同则表示不同距离。

根据LP距离可以推到得到不同的衡量距离,具体如下:
当p=1时,LP距离为曼哈顿距离,则可表示为:
在这里插入图片描述
当p=2时,LP距离为欧式距离,则可以表示为:
在这里插入图片描述
当P= 时,LP距离为切比雪夫距离,它表示两个点之间距离最大的坐标系之间的距离,可以表示为:
在这里插入图片描述

3 简单实现KNN分析

  通过基本原理设计一个简单的数据分类,通过随机取点分为两份作为样本点,再随机几个点作为待测点,并且通过KNN判断该点可能属于的类。

在这里插入图片描述

                      随机点分类可视化图

代码附录(Python):

from matplotlib.pyplot import *
import numpy as np
k = 5                                         # 简单例子,取k值为5即可
n=100                                        # 随机点分为两种颜色点的个数
def creatdot(rangex, rangey, dotnum, classtyap):        # 产生随机点分为x,y
x = np.random.normal(rangex, rangey, dotnum)y = np.random.normal(rangex, rangey, dotnum)     # 调用正态分布scatter(x, y, color=classtyap)                 # 产生点集return x, ydef discal(X, Y, markx, marky, classtyap):             # KNN计算距离for i in range(len(X)):x = X[i]y = Y[i]dis = ((x - markx)**2 + (y - marky)**2)**0.5dismp.append([dis, classtyap])return dismpdef creatmark():                              # 产生随机点作为被测数据x, y = creatdot(0, 2, 1, "green")return x, ymarkx, marky = creatmark()dismp = []
X, Y = creatdot(0, 1, n, "blue")
dismp.append(discal(X, Y, markx, marky, "blue"))
X, Y = creatdot(2, 1, n, "red")
dismp.append(discal(X, Y, markx, marky, "red"))

呆,站住别跑,留个赞,给个关注嘛都看到这了

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

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

相关文章

计算机组成原理习题课第三章-1(唐朔飞)

计算机组成原理习题课第三章-1(唐朔飞) ✨欢迎关注🖱点赞🎀收藏⭐留言✒ 🔮本文由京与旧铺原创,csdn首发! 😘系列专栏:java学习 💻首发时间:&…

[附源码]SSM计算机毕业设计校园疫情防控管理系统JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

网络结点中心性 Centrality

结点中心性 node centrality 被认为是度量网络结点重要性的重要指标 常见的结点中心性有以下7种: (以下各中心的概念在不同地方的定义可能不同,实际计算应查看使用工具的具体实现) 1、度中心性 degree centrality 常被直接称为…

Spring Security权限管理原理

1.简介 授权是更具系统提前设置好的规则,给用户分配可以访问某一资源的权限,用户根据自己所具有的权限,去执行相应的操作,spring security提供的权限管理功能主要有两种: 基于过滤器的权限管理功能(Filte…

Python学习笔记-数字类型

目录 1. 数字类型 1.1 整型 1.2 浮点数 1.3 复数 1.4 布尔类型 2. 常用内置数值计算函数库 3. 随机数函数 本文记录python中的基本数字类型信息,以及一些其他的相关知识点。 1. 数字类型 python中用于标识数字或者数值的数据类型,主要有如下分类…

盘点程序员的花式赚外快的骚操作

2022世界杯比赛难得如期开幕了,卡塔尔王子的表情包想必大家已经看到眼晕。 我拿2200亿和你玩,你踢一个0:2过不过分啊~ 现实中的投资可不比卡塔尔王子的表情包失落更多,毕竟投资有风险入行需谨慎。 然而悲惨的事实是,…

量表如何分析?

一、什么是量表 量表是一种测量工具,通常用来测量人们的主观态度、意见或价值观念。我们经常会在问卷中使用量表对调查对象进行测量,最常见到的就是李克特量表。 ‍1、定义:李克特量表 李克特量表是最常用的量表,是由美国社会心…

大数据平台功能

一 前言 计算机设备和信息数据的相互融合,对各个行业来说都是一次非常大的进步,已经渗入到工业、农业、商业、军事等领域,同时其大数据平台软件也得到一定发展。就目前来看,各类编程语言的发展、人工智能相关算法的应用、大数据时…

求树的直径算法以及证明

以下为两次dfs(bfs)的做法以及正确性证明。 算法步骤 (1)任取树上一点S,以S为源点BFS得S到各个顶点的d值; (2)取d值最大者之一为P,再以P为源点BFS得P到各个顶点的d值&am…

【计算机】可信平台模块Trusted Platform Module - TPM

简述 Brief Introduction TPM内部功能模块示意图: 引述 Trusted Platform Module Technology Overview (Windows) | Microsoft Learn: Trusted Platform Module (TPM) technology is designed to provide hardware-based, security-related functions.…

「区块链+数字身份」:DID 身份认证的新战场

美国经济学家布莱恩 • 阿瑟在其著作《技术的本质》中,写过这么一句话:「技术总是进行着这样一种循环,为解决老问题去采用新技术,新技术又引发新问题,新问题的解决又要诉诸更新的技术」。 区块链技术之所以能流行&…

在MacOS上实现两个网络调试助手的UDP通信测试

文章目录一、背景二、网络调试助手软件三、UDP通信过程一、背景 因为有一个项目要中会使用本机中两个应用程序之间的UDP通信。 因此本文记录一下怎么在MacOS上实现两个网络调试助手的UDP通信测试。 二、网络调试助手软件 我使用的网络调试助手软件是:网络调试助…

Redis实战——优惠券秒杀(超卖问题)

1 实现优惠券秒杀功能 下单时需要判断两点:1.秒杀是否开始或者结束2.库存是否充足 所以,我们的业务逻辑如下 1. 通过优惠券id获取优惠券信息 2.判断秒杀是否开始,如果未返回错误信息 3.判断秒杀是否结束,如果已经结束返回错误…

传奇登录器打不开的四种原因

最近很多传奇玩家或者GM都遇到了传奇登陆器打不开,没反应,提示无法访问指定设备等问题,导致很多游戏没有办法玩,让玩家心情沮丧,作为GM,那么就更伤心了,很多玩家进不来游戏,开服数千…

Maven笔记(2022-11-29)

一、Maven简述 1.1 什么是Maven? Apache Maven 是一款基于 Java 平台的项目管理和构建工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建、报告和文档。 简单来讲Maven就是一个构建工具,用来管理我们的项目…

GMM算法

高斯混合模型聚类(Gaussian Mixture Mode,GMM) 高斯混合模型是一种概率式的聚类方法,它假定所有的数据样本x由k个混合多元高斯分布组合成的混合分布生成。 其中高斯分布的概率密度函数如下: 现在的问题就是如何求α,μ,σ\alpha,\mu,\sigm…

Spring-全面详解(学习总结---从入门到深化)

目录 Spring简介 Spring体系结构 IOC_控制反转思想 IOC_自定义对象容器 IOC_Spring实现IOC IOC_Spring容器类型 ​ 容器实现类 IOC_对象的创建方式 使用构造方法 使用工厂类的方法…

09【MyBatis多表关联查询】

文章目录三、MyBatis多表关联查询3.1 表的关系3.2 一对一查询3.2.1 搭建环境3.2.2 需求分析3.2.3 dao接口3.2.3 mapper.xml3.2.4 测试3.2.5 配置MyBatis一对一关系1)传统映射:2)使用association标签映射3.3 一对多查询3.3.1 需求分析3.3.2 da…

Kamiya丨Kamiya艾美捷大鼠微量白蛋白酶联免疫吸附试验说明书

Kamiya艾美捷大鼠微量白蛋白酶联免疫吸附试验预期用途: 大鼠微量白蛋白酶联免疫吸附试验(ELISA)是一种高灵敏度的双位点酶联免疫吸附试验(ELISA)大鼠生物样品中微量白蛋白的测定。仅供研究使用。 引言 白蛋白&#x…

SpringBoot、EasyPoi、Echarts 实现文档导入、出、图表显示 (饼状图、柱状图) 保姆级教程

一、介绍环境 EasyPOI: 现在我们就来介绍下EasyPoi,首先感谢EasyPoi 的开发者​。EasyPoi开源 easypoi 是为了让开发者快速的实现excel,word,pdf的导入导出,基于Apache poi基础上的一个工具包。easypoi教程 Echarts: …