机器学习---KNN最近邻算法

1、KNN最近邻算法

K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一,有监督算法。该方法的思路是:如果一个样本在特征空间中的k个最相似的样本中的大多数属于某一个类别,则该样本也属于这个类别。KNN算法由你的邻居来推断出你的类别,KNN算法就是用距离来衡量样本之间的相似度。

如果K = 3,绿色圆点的最近的3个邻居是2个红色小三角形和1个蓝色小正方形,少数从属于多数,基于统计的方法,判定绿色的这个待分类点属于红色的三角形一类。

如果K = 5,绿色圆点的最近的5个邻居是2个红色三角形和3个蓝色的正方形,还是少数从属于多数,基于统计的方法,判定绿色的这个待分类点属于蓝色的正方形一类。

K 值的选择,距离度量和分类决策规则是该算法的三个基本要素。K值的选择一般低于样本数据的平方根,一般是不大于20的整数。距离度量常用的有欧式距离,曼哈顿距离,余弦距离等,一般使用欧氏距离,对于文本分类,常用余弦距离。分类决策就是“少数服从多数”的策略。

2、KNN算法步骤

(1)、对于未知类别的数据(对象,点),计算已知类别数据集中的点到该点的距离。

(2)、按照距离由小到大排序

(3)、选取与当前点距离最小的K个点

(4)、确定前K个点所在类别出现的概率

(5)、返回当前K个点出现概率最高的类别作为当前点预测分类

3、KNN算法复杂度

KNN 分类的计算复杂度和训练集中的文档数目成正比,也就是说,如果训练集中文档总数为 n,那么 KNN 的分类时间复杂度为O(n)

4、KNN问题

该算法在分类时有个主要的不足是,当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的 K 个邻居中大容量类的样本占多数。解决:可以采用权值的方法,根据和该样本距离的远近,对近邻进行加权,距离越小的邻居权值大,权重一般为距离平方的倒数。

5、KNN数据归一化

为了防止某一维度的数据的数值大小对距离计算产生影响,保证多个维度的特征是等权重的,最终结果不能被数值的大小影响,应该将各个维度进行数据的归一化,把数据归一化到[0,1]区间上。

归一化公式:newValue=\frac{(oldValue-min)}{max-min}

6、距离度量

欧式距离:

也称欧几里得距离,在一个N维度的空间里,求两个点的距离,这个距离肯定是一个大于等于零的数字,那么这个距离需要用两个点在各自维度上的坐标相减,平方后加和再开方。一维,二维,三维的欧式距离计算方法:

一维:d=\sqrt{(x_{1}-x_{2})^{2}}  

二维:d=\sqrt{(x_{1}-x_{2})^{2}+(y_{1}-y_{2})^{2}))}

三维:d=\sqrt{(x_{1}-x_{2})^{2}+(y_{1}-y_{2})^{2}+(z_{1}-z_{2})^{2}}

平方欧式距离:

就是欧式距离的平方

曼哈顿距离:

相比欧式距离简单的多,曼哈顿距离只要把两个点坐标的x坐标相减取绝对值,y坐标相减取绝对值,再加和,c=\left |x_{1} -x_{2} \right |+\left |y_{1} -y_{2} \right |  ,三维,四维以此类推。

余弦距离:

也叫余弦相似度,是用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小的度量。如果两个向量的方向一致,即夹角接近零,那么这两个向量就越相近。要确定两个向量方向是否一致,要用到余弦定理计算向量的夹角。

闵可夫斯基距离:

闵式距离不是一种距离,而是一组距离的定义,是对多个距离度量公式的概括性表述。定义:两个n维变量(可以理解为n维数组,就是有n个元素)a(x_{11},x_{12},.....,x_{1n}) 与b(x_{21},x_{22},.....,x_{2n})间的闵可夫斯基距离定义为:d_{12}=\sqrt[p]{\sum_{k=1}^{n}\left | x_{1k}-x_{2k} \right |^{p}}其中p是一个变参数,当p=1时,就是曼哈顿距离,当p=2时,就是欧式距离,当p \to \infty 就是切比雪夫距离。

 就是切比雪夫距离。

切比雪夫距离:

国际象棋中,国王可以直行、横行、斜行。国王走一步,可以移动到相邻的8个方格的任意一个。国王从格子(x_{1},y_{1})到格子x_{2},y_{2}最少需要多少步?这个距离就是切比雪夫距离。

切比雪夫距离公式简单理解为就是各坐标数值差的最大值,在2维空间中的计算公式为:

d=max(\left |x_{1} -x_{2} \right |,\left | y_{1} -y_{2} \right |)

谷本距离:

同时考虑余弦距离和欧式距离的测度。

加权距离测度

可以指定某一维度的权重比例,从而使某个权重的影响力更大。

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

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

相关文章

【加法减法选择计数器_2023.12.15】

功能 计数器位宽为 4;可以实现同步清零,及同步置数的功能;通过一个输入信号来选择,实现加法计数和减法计数: 如果加到最大值后继续加,或减到0后继续减时,计数器不变; 实现 sel端口…

关东升老师从小白到大牛系列丛书(由清华大学出版社出版)

助力技术成长,成就大牛之路 在这个科技日新月异的时代,掌握一门编程语言或专业技能已是必备,不再是奢侈。清华大学出版社出版的“从小白到大牛”的系列丛书,涵盖Python、Java、Kotlin、Android和SQL,助你快速在技术之…

python读取csv文件

在Python中,你可以使用pandas库来读取CSV文件。以下是一个基本的例子: import pandas as pd# 读取CSV文件data pd.read_csv(filename.csv)# 显示前几行数据print(data.head()) 这里,filename.csv应该被替换为你的CSV文件的实际路径和名称。…

PETS渗透测试标准流程

PTES组织 PETS渗透测试标准流程原文 http://www.pentest-standard.org/index.php/Main_Page学习一下渗透测试国际规范流程 英文不好的师傅可以使用浏览器插件沙拉查词或者整页翻译。 浏览器扩展中添加划词翻译 非常好用

Qt 中文处理

windows下 Qt显示中文的几种方式: 1, 环境:Qt 5.15.2 vs2019 64位 win11系统 默认用Qt 创建的文件使用utf-8编码格式,此环境下 中文没有问题 ui->textEdit->append("中文测试"); 2, 某些 低于…

missingno——缺失数据可视化

【说明】文章内容来自《机器学习入门——基于sklearn》,用于学习记录。若有争议联系删除。 数据处理中,缺失数据可视化。missingno提供了一个灵活且易于使用的缺少数据可视化工具和实用程序的小型工具集,可以快速直观地概述数据集的完整性。 …

关于set和map的简单理解

1. 关于搜索 1.1 set和map的引入 Map和set是一种专门用来进行搜索的容器或者数据结构,其搜索的效率与其具体的实例化子类有关。以前常见的搜索方式有: 1. 直接遍历,时间复杂度为O(N),元素如果比较多效率会非常慢 2. 二分查找&…

verilog语法进阶-分布式ram

概述: FPGA的LUT查找表是用RAM设计的,所以LUT可以当成ram来使用,也并不是所有的LUT都可以当成ram来使用,sliceM的ram可以当成分布式ram来使用,而sliceL的ram只能当成rom来使用,也就是只能读,不能写&#x…

JS的箭头函数this:

箭头函数不会创建自己的this,它只会从自己的作用域链的上一层沿用this。 具体看实例: //以前:谁调用的这个函数 this就指向谁// console.log(this);//window// function fn(){// console.log(this);//window 因为这个函数也是window调用…

python学习1

大家好,这里是七七,今天开始又新开一个专栏,Python学习。这次思考了些许,准备用例子来学习,而不是只通过一大堆道理和书本来学习了。啊对,这次是从0开始学习,因此大佬不用看本文了,小…

【Lidar】基于Python格网法计算点云体积(eg.树木体积)

这两天一直不在状态,不是特别想分享文章,所以也没怎么更新。但是代码放在文件里始终不是它的归宿,只有被不断使用它才能进步,才能诠释它的意义。所以今天抽空给大家分享一下如何基于Python利用格网法计算点云的体积,我…

Spring+SpringMVC+SpringBoot

Spring bean bean基础配置 bean别名配置 注意事项: 获取bean无论是通过id还是name获取。如果无法获取到,将抛出异常NoSuchBeanDefinitionException bean的作用范围配置 适合交给容器进行管理的bean 表现层对象、业务层对象、数据层对象、工具对象 不…

jmeter调试错误全集(入门必备)

一、前言 在使用jmeter做接口测试的过程中大家是不是经常会遇到很多问题,但是无从下手,不知道从哪里开始找起,对于初学者而言这是一个非常头痛的事情。这里结合笔者的经验,总结出以下方法。 二、通过查看运行日志调试问题 写好脚…

UE4/UE5 日志插件(基于spdlog)

1 解决问题 对于高频日志序列化到本地的需求,spdlog肯定完美满足。 源码地址:https://github.com/gabime/spdlog 博主下载的版本为 spdlog-1.12.0,各位大佬可以根绝自己爱好选择。 2 过程介绍 大概目录: SpdlogLibC目录下是对…

WGAN 优势小结

我在上一篇博文为什么 GAN 不好训练中,分析了原始 GAN 难以训练的原因,本篇博文将分析下 WGAN 的优势。 1. Wasserstein 距离 W 是指 Wasserstein,Wasserstein 距离又叫Earth-Mover(EM)距离。Wasserstein距离相比KL散…

2024年企业和个人都在备考的权威性 AI人工智能工程师培训类证书

给大家推荐个2024年企业和个人都在备考的权威性 AI人工智能工程师培训类证书,看能否帮到大家的: 由工业和信息化部电子工业标准化研究院颁发的关于以下两类证书: 计算机自然语言及语音处理设计开发工程师(中级) 计算机…

软件设计师——信息安全(二)

📑前言 本文主要是【信息安全】——软件设计师——信息安全的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 &#x1f304…

【无数次任意地址读+栈溢出】ImaginaryCTF2023 -- opportunity

前言 本题不难&#xff0c;但感觉笔者的做法挺有意思&#xff08;嘿嘿&#xff0c;自夸啦&#xff09;&#xff0c;利用到了最近学到的 ret2hbp。 漏洞分析 保护&#xff1a;smap 等都开了&#xff0c;标配啦 >_< 漏洞是直给的&#xff1a;这里存在一个 256 字节的任…

阅读代码的记录

1-utils_metrics.py用在train.py中做指标衡量&#xff0c;现在想在推理&#xff08;predict.py&#xff09;的时候衡量一下指标 2-调研眼睛部位的单独分割。 https://blog.csdn.net/qq_40234695/article/details/88633094 衡量图像语义分割准确率主要有三种方法&#xff1a; …

高级C#技术(二)

前言 本章为高级C#技术的第二节也是最后一节。前一节在下面这个链接 高级C#技术https://blog.csdn.net/qq_71897293/article/details/134930989?spm1001.2014.3001.5501 匿名类型 匿名类型如其名&#xff0c;匿名的没有指定变量的具体类型。 举个例子&#xff1a; 1 创建…