Elasticsearch:什么是 kNN?

kNN - K-nearest neighbor 定义

kNN(即 k 最近邻算法)是一种机器学习算法,它使用邻近度将一个数据点与其训练并记忆的一组数据进行比较以进行预测。 这种基于实例的学习为 kNN 提供了 “惰性学习(lazy learning)” 名称,并使算法能够执行分类或回归问题。 kNN 的假设是相似的点可以在彼此附近找到 —— 物以类聚。

作为一种分类算法,kNN 将新数据点分配给其邻居中的多数集。 作为一种回归算法,kNN 根据最接近查询点的值的平均值进行预测。

kNN 是一种监督学习算法,其中 “k” 代表分类或回归问题中考虑的最近邻的数量,“NN”代表为 k 选择的数量的最近邻。

kNN 算法简史

kNN 最初由 Evelyn Fix 和 Joseph Hodges 于 1951 年在为美国军方进行的研究中开发。 他们发表了一篇解释判别分析的论文,这是一种非参数分类方法。 1967 年,Thomas Cover 和 Peter Hart 对非参数分类方法进行了扩展,并发表了他们的 “最近邻模式分类” 论文。 大约 20 年后,詹姆斯·凯勒 (James Keller) 对该算法进行了改进,他开发了一种 “模糊 KNN”,可以产生较低的错误率。

如今,kNN 算法是使用最广泛的算法,因为它适用于从遗传学到金融和客户服务的大多数领域。

kNN 是如何工作的?

kNN 算法作为一种监督学习算法,这意味着它会被输入它记忆的训练数据集。 它依赖于这个标记的输入数据来学习一个函数,该函数在给定新的未标记数据时产生适当的输出。

这使得算法能够解决分类或回归问题。 虽然 kNN 的计算发生在查询期间而不是训练阶段,但它具有重要的数据存储要求,因此严重依赖内存。

对于分类问题,KNN 算法将根据多数分配类标签,这意味着它将使用给定数据点周围最常出现的标签。 换句话说,分类问题的输出是最近邻的众数。

区别:多数投票与相对多数投票

多数投票(majority voting)表示超过 50% 的票数为多数。 如果考虑两个类标签,则这适用。 但是,如果考虑多个类别标签,则适用相对多数投票(plurality voting)。 在这些情况下,超过 33.3% 的任何值都足以表示多数,从而提供预测。 因此,相对多数投票(plurality voting)是定义 kNN 模式的更准确术语。

如果我们要说明这种区别:

二元预测

Y: 🎉🎉🎉❤️❤️❤️❤️❤️

多数投票: ❤️

相对多少投票: ❤️

多类别设置

Y: ⏰⏰⏰💰💰💰🏠🏠🏠🏠

多数投票:没有

相对多数投票:🏠

回归问题使用最近邻的平均值来预测分类。 回归问题将产生实数作为查询输出。

例如,如果你要制作一个图表来根据某人的身高来预测其体重,则表示身高的值将是独立的,而体重的值将是相关的。 通过计算平均身高体重比,你可以根据某人的身高(自变量)估计其体重(因变量)。

4 种计算 kNN 距离度量的类型

kNN 算法的关键是确定查询点与其他数据点之间的距离。 确定距离度量可以实现决策边界。 这些边界创建不同的数据点区域。 有不同的方法用于计算距离:

  • 欧几里得距离Euclidean distance)是最常见的距离度量,它测量查询点和其他被测量点之间的直线。
  • 曼哈顿距离Manhattan distance )也是一种流行的距离度量,它度量两点之间的绝对值。 它以网格表示,通常称为出租车几何形状 - 如何从 A 点(你的查询点)行驶到 B 点(被测量点)?
  • 闵可夫斯基距离Minkowski distance)是欧几里得距离度量和曼哈顿距离度量的推广,它可以创建其他距离度量。 它是在赋范向量空间中计算的。 在 Minkowski 距离中,p 是定义计算中使用的距离类型的参数。 如果 p=1,则使用曼哈顿距离。 如果 p=2,则使用欧几里德距离。
  • 汉明距离Hamming distance),也称为重叠度量,是一种与布尔向量或字符串向量一起使用的技术,用于识别向量不匹配的位置。 换句话说,它测量两个长度相等的字符串之间的距离。 它对于错误检测和纠错码特别有用。

如何选择最佳的 k 值

要选择最佳 k 值(考虑的最近邻的数量),你必须尝试几个值,以找到能够生成最准确的预测且误差最少的 k 值。 确定最佳值是一种平衡行为:

  • 低 k 值会使预测不稳定
    • 举个例子:一个查询点被 2 个绿点和 1 个红色三角形包围。 如果 k=1 并且最接近查询点的点恰好是绿点之一,则算法将错误地将绿点预测为查询结果。 低 k 值意味着高方差(模型与训练数据拟合得太紧密)、高复杂性和低偏差(模型足够复杂,可以很好地拟合训练数据)。
  • 高 k 值有噪音
    • 较高的 k 值将提高预测的准确性,因为需要计算众数或平均值的数量更多。 但是,如果 k 值太高,则可能会导致低方差、低复杂性和高偏差(模型不够复杂,无法很好地拟合训练数据)。

理想情况下,你希望找到一个介于高方差和高偏差之间的 k 值。 还建议为 k 选择奇数,以避免分类分析中出现平局。

正确的 k 值也与你的数据集相关。 要选择该值,你可以尝试查找 N 的平方根,其中 N 是训练数据集中的数据点数量。 交叉验证策略还可以帮助你选择最适合你的数据集的 k 值。

kNN算法的优点

kNN 算法通常被描述为 “最简单” 的监督学习算法,这导致了它的几个优点:

  • 简单:kNN 非常简单且准确,因此很容易实现。 因此,它通常是数据科学家首先要学习的分类器之一。
  • 适应性强:一旦将新的训练样本添加到数据集中,kNN 算法就会调整其预测以包含新的训练数据。
  • 易于编程:kNN 仅需要几个超参数 - k 值和距离度量。 这使得它成为一个相当简单的算法。

此外,kNN 算法不需要训练时间,因为它存储训练数据,并且仅在进行预测时使用其计算能力。

kNN 的挑战和局限性

虽然 kNN 算法很简单,但它也存在一系列挑战和限制,部分原因在于它的简单性:

  • 难以扩展:由于 kNN 占用大量内存和数据存储,因此带来了与存储相关的费用。 这种对内存的依赖也意味着该算法是计算密集型的,这反过来又是资源密集型的。
  • 维数灾难:这是指计算机科学中发生的一种现象,其中一组固定的训练示例受到维度数量不断增加以及这些维度中特征值固有增加的挑战。 换句话说,模型的训练数据无法跟上超空间维度的演变。 这意味着预测变得不太准确,因为查询点和相似点之间的距离在其他维度上变得更宽。
  • 过度拟合:如前所述,k 的值将影响算法的行为。 当 k 值太低时尤其可能发生这种情况。 较低的 k 值可能会过度拟合数据,而较高的 k 值会 “平滑” 预测值,因为算法会在更大的区域内对值进行平均。

顶级 kNN 用例

kNN 算法因其简单性和准确性而广受欢迎,具有多种应用,特别是用于分类分析时。

  • 相关性排名:kNN 使用自然语言处理 (NLP) 算法来确定哪些结果与查询最相关。
  • 图像或视频的相似性搜索:图像相似性搜索使用自然语言描述来查找与文本查询匹配的图像。

  • 模式识别:kNN 可用于识别文本或数字分类中的模式。
  • 金融:在金融领域,kNN可以用于股市预测、货币汇率等。
  • 产品推荐和推荐引擎:想想 Netflix! “如果你喜欢这个,我们认为你也会喜欢……” 任何使用该句子版本的网站,无论是否公开,都可能使用 kNN 算法来为其推荐引擎提供动力。
  • 医疗保健:在医学和医学研究领域,kNN算法可用于遗传学中计算某些基因表达的概率。 这使得医生能够预测癌症、心脏病或任何其他遗传性疾病的可能性。
  • 数据预处理:kNN 算法可用于估计数据集中的缺失值。

使用 Elastic 进行 kNN 搜索

Elasticsearch 使你能够实现 kNN 搜索。 支持两种方法:近似 kNN(approximate kNN)和精确(exact)、强力 kNN(brute-force)。 你可以在相似性搜索、基于 NLP 算法的相关性排名以及产品推荐和推荐引擎的上下文中使用 kNN 搜索。

使用 Elastic 实现 kNN 搜索

K-最近邻常见问题解答

何时使用 kNN?

使用 kNN 根据相似性进行预测。 因此,你可以使用 kNN 在自然语言处理算法的上下文中进行相关性排名、相似性搜索和推荐引擎或产品推荐。 请注意,当数据集相对较小时,kNN 非常有用。

kNN 是有监督机器学习还是无监督机器学习?

kNN 是监督机器学习。 它被提供一组它存储的数据,并且仅在查询时处理数据。

kNN 代表什么?

kNN 代表 k-近邻算法,其中 k 表示分析中考虑的最近邻的数量。

接下来你应该做什么

只要你准备好...我们可以通过以下 4 种方式帮助你将数据引入你的业务:

  • 开始免费试用,看看 Elastic 如何帮助你的业务。
  • 浏览我们的解决方案,了解 Elasticsearch 平台的工作原理以及我们的解决方案如何满足你的需求。
  • 通过我们 45 分钟的网络研讨会,了解如何设置 Elasticsearch 集群并开始数据收集和摄取。
  • 与你认识并喜欢阅读本文的人分享这篇文章。 通过电子邮件、LinkedIn、Twitter 或 Facebook 与他们分享。

更多阅读:

  • Elasticsearch:介绍 kNN query,这是进行 kNN 搜索的专家方法

  • Elasticsearch:探索 k-nearest neighbor (kNN) 搜索

  • 增强常见问题解答搜索引擎:在 Elasticsearch 中利用 KNN 的力量

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

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

相关文章

2.5网安学习第二阶段第五周回顾(个人学习记录使用)

本周重点 ①多进程和多线程 1、进程和线程 2、多线程爆破 ②Redis数据库 1、Redis的使用 2、Redis持久化 3、Redis未授权免密登录 ③嗅探和Python攻击脚本 1、嗅探(端口扫描和IP扫描) 2、SCAPY的应用 3、Python攻击脚本(SYN半连接…

前端数据可视化:ECharts使用

可视化介绍 ​  ​  应对现在数据可视化的趋势,越来越多企业需要在很多场景(营销数据,生产数据,用户数据)下使用,可视化图表来展示体现数据,让数据更加直观,数据特点更加突出。   ​  数据可视化主要目…

Qt_快速安装指南

下载Qt在线安装程序(不仔细介绍)注册Qt账号(不仔细介绍)使用快速运行的命令,按照指定的下载地址下载 在Qt指定目录打开cmd命令窗口.\eqt-unified-windows-x86-4.0.1-1-online. exe --mirror https://mirrors.ustc.edu.…

华清远见嵌入式学习——驱动开发——作业1

作业要求&#xff1a; 通过字符设备驱动分步注册过程实现LED驱动的编写&#xff0c;编写应用程序测试&#xff0c;发布到CSDN 作业答案&#xff1a; 运行效果&#xff1a; 驱动代码&#xff1a; #include <linux/init.h> #include <linux/module.h> #include &l…

代理模式笔记

代理模式 代理模式代理模式的应用场景先理解什么是代理&#xff0c;再理解动静态举例举例所用代码 动静态的区别静态代理动态代理 动态代理的优点代理模式与装饰者模式的区别 代理模式 代理模式在设计模式中是7种结构型模式中的一种&#xff0c;而代理模式有分动态代理&#x…

Nginx 配置前端工程项目二级目录

前提&#xff1a; 前端工程技术框架: vue 后端工程技术工程&#xff1a;spring boot 需求&#xff1a;需要通过二级目录访问前端工程&#xff1a; 如之前&#xff1a;http://127.0.0.1:80/ 改成 http://127.0.0.1/secondDirectory:80/ 一.前端工程支持二级目录 1.编译文…

(十八)devops持续集成开发——使用docker安装部署jenkins流水线服务

前言 本节内容介绍如何使用docker容器来部署安装jenkins流水线服务。关于docker容器的安装本节内容不做介绍。请读者提前安装。 正文 ①使用docker查找jenkins官方镜像 ② 拉取jenkins官方镜像jenkins/jenkins&#xff0c;选择一个最新稳定版本&#xff0c;避免一些插件不兼…

15.一种坍缩式的简单——组合模式详解

当曾经的孩子们慢慢步入社会才知道&#xff0c;那年味渐淡的春节就像是疾驰在人生路上的暂停键。 它允许你在隆隆的鞭炮声中静下心来&#xff0c;瞻前顾后&#xff0c;怅然若失。 也允许你在寂静的街道上屏气凝神&#xff0c;倾听自己胸腔里的那团人声鼎沸。 孩子们会明白的&am…

mysql在服务器中的主从复制Linux下

mysql在服务器中的主从复制Linux下 为什么要进行主从复制主从复制的原理主从复制执行流程操作步骤主库创建从库创建 测试 为什么要进行主从复制 在业务中通常会有情况&#xff0c;在sql执行时&#xff0c;将表锁住&#xff0c;导致不能进行查询&#xff0c;这样就会影响业务的…

游戏平台如何定制开发?

随着科技的飞速发展和互联网的普及&#xff0c;游戏平台已成为人们休闲娱乐的重要选择。为了满足用户多样化的需求&#xff0c;游戏平台的定制开发显得尤为重要。本文将探讨游戏平台定制开发的过程、关键要素以及注意事项&#xff0c;为有志于涉足此领域的开发者提供参考。 一、…

商品评论接口的应用

一、应用场景 商家调研自家产品的满意度及改进建议&#xff0c;B端商户想要铺货挑选商品&#xff0c;独立站运营商 二、公共参数 请求地址: https://api/item_review 三、请求参数 请求参数&#xff1a;num_iid600530677643&data&page1 参数说明&#xff1a;参数…

OpenAI文生视频大模型Sora概述

Sora&#xff0c;美国人工智能研究公司OpenAI发布的人工智能文生视频大模型&#xff08;但OpenAI并未单纯将其视为视频模型&#xff0c;而是作为“世界模拟器” &#xff09;&#xff0c;于2024年2月15日&#xff08;美国当地时间&#xff09;正式对外发布。 Sora可以根据用户…

golang入门介绍-1

今天开始发布关于go语言入门到实战内容&#xff0c;各位小伙伴准备好。 go介绍 Go语言&#xff08;或 Golang&#xff09;起源于 2007 年&#xff0c;并在 2009 年正式对外发布。是由 Google 公司开发的一种静态强类型、编译型、并发型、并具有垃圾回收功能的编程语言。 Go 是…

Maven depoly:Skipping artifact deployment

问题描述&#xff1a; 使用IDEA执行mvn depoly将本地开发的模块发布到Maven私服时&#xff0c;一直提示&#xff1a;Skipping artifact deployment&#xff0c;自动跳过了depoly部署阶段。 问题分析 Maven构建生命周期中的每一个阶段都是由对应的maven插件执行具体工作的。既然…

【无标题】旋转链表与力扣报错:member access within null pointer of type ‘struct ListNode‘

项目场景&#xff1a; 做单链表反转题目&#xff0c;报错&#xff1a;member access within null pointer of type ‘struct ListNode’ 题目链接:LINK 问题描述 我明明在初始化指针时候&#xff0c;已经处理了n2->next情况却依然报错 这个报错提示含义是&#xff1a;大概就…

C++日志库plog使用指南

前言 之前介绍过一个C语言日志库 轻量级c语言开源日志库log.c介绍&#xff0c;源代码只有不到200行&#xff0c;使用非常方便。但是也存在很多缺点&#xff0c;比如日志时间只支持打印到秒&#xff0c;没有作多线程处理&#xff0c;不支持日志回滚。在小型项目或者测试demo中使…

【Effective Objective - C】—— block 块

【Effective Objective - C】—— block 块 前言37.理解块的概念块的基础知识块可以捕获变量内联块的用法块的内部结构栈块堆块全局块要点 38.为常用的块类型创建typedef要点 39.用handler块降低代码分散程度协议传值实现异步块实现异步回调操作里的块要点 40.用块引用其所属对…

SpringBoot项目快速创建

SpringBoot项目快速创建 方法一&#xff1a;通过IDEA的Spring Initializr 点击文件&#xff0c;新建项目&#xff0c;选择Spring Initializr 名称&#xff1a;项目名称存放位置&#xff1a; 语言&#xff1a;Java类型&#xff1a;Maven组&#xff1a;<groupId>com.exam…

MyBatisPlus条件构造器和常用接口

前置配置文章 一、wapper介绍 wrapper的继承体系&#xff1a; Wrapper &#xff1a; 条件构造抽象类&#xff0c;最顶端父类 AbstractWrapper &#xff1a; 用于查询条件封装&#xff0c;生成 sql 的 where 条件 QueryWrapper &#xff1a; 查询条件封装UpdateWrapper &#x…

【MATLAB GUI】 4. 坐标区和表

看B站up主freexyn的freexyn编程实例视频教程系列36Matlab GUI的学习笔记 文章目录 坐标区表 坐标区 任务要求设计一个图像显示界面&#xff0c;根据选定的周期做出相应的sin函数图像 使用坐标区、弹出式菜单、普通按钮设计页面&#xff0c;弹出式菜单string设置为1、2、3、4代…