人工智能|机器学习——k-近邻算法(KNN分类算法)

1.简介

 k-最近邻算法,也称为 kNNk-NN,是一种非参数、有监督的学习分类器,它使用邻近度对单个数据点的分组进行分类或预测。虽然它可以用于回归问题,但它通常用作分类算法,假设可以在彼此附近找到相似点。

对于分类问题,根据比重分配类别标签,即使用在给定数据点周围最多表示的标签。虽然这在技术上被认为是plurality voting(多数表决),但majority vote一词在书面语中更常用。这些术语之间的区别在于,majority voting在技术上需要超过 50% ,这主要适用于只有两个类别的情况。当您有多个类别时 - 例如四个类别,您不一定需要 50% 才能对一个类别做出结论;您可以分配一个占比超过 25% 的类别标签。Wisconsin-Madison大学用了一个例子很好地总结了这一点。

回归问题使用与分类问题类似的概念,但在这种情况下,取 k 个最近邻的平均值来对分类进行预测。主要区别是分类用于离散值,而回归用于连续值。但是,在进行分类之前,必须定义距离。欧几里得距离是最常用的,我们将在下面深入研究。

值得注意的是,kNN 算法也是lazy learning模型家族的一部分,这意味着所有计算都发生在进行分类或预测时。由于它严重依赖内存来存储其所有训练数据,因此也称为基于实例或基于内存的学习方法。

Evelyn Fix 和 Joseph Hodges 在 1951 年的这篇论文中提出了围绕 kNN 模型的最初想法,而 Thomas Cover 在他的研究中扩展了他们的概念,“Nearest Neighbor Pattern Classification”。虽然它不像以前那么受欢迎,但由于其简单性和准确性,它仍然是人们在数据科学中学习的首批算法之一。然而,随着数据集的增长,kNN 变得越来越低效,影响了模型的整体性能。它通常用于简单的推荐系统、模式识别、数据挖掘、金融市场预测、入侵检测等。

2. 距离度量

kNN距离指标计算

回顾一下,k-最近邻算法的目标是识别给定查询点的最近邻,以便我们可以为该点分配一个类标签。为了做到这一点,kNN 有几个要求:

  • 确定距离度量

为了确定哪些数据点最接近给定查询点,需要计算查询点与其他数据点之间的距离。这些距离度量有助于形成决策边界,将查询点划分为不同的区域。您通常会看到使用 Voronoi 图可视化的决策边界。

虽然您可以选择多种距离度量,但本文仅涵盖以下内容:

欧几里得距离(p=2):这是最常用的距离度量,仅限于实值( real-valued )向量。使用下面的公式,它测量查询点和被测量的另一个点之间的直线。

曼哈顿距离(p=1):这也是另一种流行的距离度量,它测量两点之间的绝对值。它也被称为出租车(taxicab)距离或城市街区(city block)距离,因为它通常用网格可视化,说明人们如何通过城市街道从一个地址导航到另一个地址。

闵可夫斯基(Minkowski)距离:该距离度量是欧几里得和曼哈顿距离度量的广义形式。下面公式中的参数 p 允许创建其他距离度量。当 p 等于 2 时,这个公式表示欧几里得距离,p 等于 1 表示曼哈顿距离 。

汉明(Hamming)距离:这种技术通常与布尔或字符串向量一起使用,识别向量不匹配的点。因此,它也被称为重叠度量。可以用以下公式表示:

例如,如果您有以下字符串,Hamming距离将为 2,因为只有两个值不同。

3.K的选择

k-NN 算法中的 k 值定义了将检查多少个邻居以确定查询点的分类。例如,如果 k=1,实例将被分配到与其单个最近邻相同的类。定义 k 是一种平衡行为,因为不同的值可能会导致过拟合或欠拟合。

  • 较低的 k 值可能具有较高的方差,但较低的偏差,较大的 k 值可能导致较高的偏差和较低的方差。
  • k 的选择将很大程度上取决于输入数据,因为有许多异常值或噪声的数据可能会在 k 值较高时表现更好。总之,建议 k 使用奇数以避免分类歧义,交叉验证策略可以帮助您为数据集选择最佳 k。

4.K-近邻算法伪代码:

①计算已知类别数据集中的点与当前点之间的距离

②按照距离递增次序排序

③选择与当前点距离最小的k个点

④确定前k个点所在类别(标签)的出现频率

⑤返回前k个点出现频率最高的类别作为当前点的预测分类

5.K-近邻算法程序清单:

希望深入研究,可以通过使用Pythonscikit-learn 来了解有关 k-NN 算法的更多信息。以下代码是如何使用 kNN 模型创建和预测的示例:

from sklearn.neighbors import KNeighborsClassifiermodel_name = ‘K-Nearest Neighbor Classifier’`kNN`Classifier = KNeighborsClassifier(n_neighbors = 5, metric = ‘minkowski’, p=2)`kNN`_model = Pipeline(steps=[(‘preprocessor’, preprocessorForFeatures), (‘classifier’ , `kNN`Classifier)])`kNN`_model.fit(X_train, y_train)y_pred = `kNN`_model.predict(X_test)

6. 应用

k-NN 算法已在各种问题中得到应用,主要是在分类中。其中一些用例包括:

  • 数据预处理

数据集经常有缺失值,但 kNN 算法可以在缺失数据插补的过程中估计这些值。

  • 推荐问题

使用来自网站的clickstream(点击流)数据,kNN 算法已用于向用户提供有关其他内容的自动推荐。这项研究表明,用户被分配到特定组,并根据该组的用户行为,为他们提供推荐。然而,考虑到 kNN 的应用规模,这种方法对于较大的数据集可能不是最优的。

  • 金融

它还用于各种金融和经济用例。例如,一篇论文展示了如何在信用数据上使用 kNN 可以帮助银行评估向组织或个人提供贷款的风险。它用于确定贷款申请人的信用状况。

  • 生命健康

kNN 还应用于医疗保健行业,预测心脏病发作和前列腺癌的风险。该算法通过计算基因的表达来工作。

  • 模式识别

kNN 还有助于识别模式,例如文本和数字分类。这对于识别在表格或邮寄信封上的手写数字特别有帮助。

7. 优缺点

就像任何机器学习算法一样,k-NN 也有其优点和缺点。根据实际情况,它可能是也可能不是最优的选择。

7.1. 优势

  • 易于实现

鉴于算法的简单性和准确性,它是新数据科学家将学习的首批分类器之一。

  • 适应性强

随着新训练样本的添加,算法会根据任何新数据进行调整,因为所有训练数据都存储在内存中。

  • 超参数少:

kNN 只需要一个 k 值和一个距离度量,与其他机器学习算法相比,参数是很少的。

7.2. 不足

  • 数据规模

由于 kNN 是一种惰性算法,与其他分类器相比,它占用了更多的内存和数据存储。从时间和金钱的角度来看,这可能是昂贵的。更多的内存和存储将增加业务开支,而更多的数据可能需要更长的时间来计算。虽然已经创建了不同的数据结构(例如 Ball-Tree)来解决计算效率低下的问题,但根据业务问题,采用其他的分类器可能更好。

  • 维度

kNN 算法往往会成为维度灾难的受害者,这意味着它在高维数据输入时表现不佳。这有时也称为峰值现象,在算法达到最佳特征数量后,额外的特征会增加分类错误的数量,尤其是当样本尺寸更小。

  • 过拟合

由于“curse of dimensionality”(维度灾难),kNN 更容易出现过拟合。虽然利用特征选择和降维技术可以防止这种情况发生,但 k 的值也会影响模型的行为。较低的 k 值可能会过度拟合数据,而较高的 k 值往往会“平滑”预测值,因为它是对更大区域或邻域的值进行平均。但是,k 值太高,模型可能会欠拟合。

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

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

相关文章

五个与iOS基础开发相关的案例:

iOS是由苹果公司开发的移动操作系统,专为iPhone、iPad和iPod touch等设备设计。iOS系统以其流畅的用户体验、丰富的功能和强大的安全性而著称,成为全球最受欢迎的移动操作系统之一。iOS基础开发则是构建在这些设备上的应用程序的过程,涉及多个…

JavaScript—— 运算符总结(超全)

JavaScript—— 运算符总结(超全) 1.小括号运算符 ​ ()在我们js执行代码的过程中,一行代码内,优先执行小括号里面的内容; 2. 自增和自减运算符(一元运算符) 自增:让当前变量1的意思 let num 2 num // 3 num // …

Linux shell 列举当前所有网卡的IPV4地址及网卡名。

命令一&#xff1a; ip -4 addr show | grep inet | awk { printf "%s ", $2; for (i5; i<NF; i) { printf "%s ", $i }; printf "\n" } | awk {print $1, $NF} 命令二&#xff1a; 忽略 lo 环路网卡 ip -4 addr show | grep inet | awk …

标志寄存器

文章目录 标志寄存器是什么ZF标志PF标志SF标志CF标志OF标志adc指令sbb指令cmp指令有条件的转移指令DF标志和串传送指令pushf和popf 标志寄存器是什么 在8086CPU中标志寄存器是一个特殊的寄存器&#xff0c;具有以下3中功能&#xff1a; 1.用来存储相关指令的某些执行结果 2.用…

.SVN 信息泄露漏洞原理以及修复方法

漏洞名称&#xff1a;.SVN信息泄露、版本管理工具文件信息泄漏 漏洞描述&#xff1a;据介绍&#xff0c;SVN&#xff08;subversion&#xff09;是程序员常用的源代码版本管理软件。一旦网站出现SVN 漏洞&#xff0c;其危害远比SQL注入等其它常见网站漏洞更为致命&#xff0c;…

餐饮行业新风口:社区店的成功案例与经营秘诀

在竞争激烈的餐饮行业中&#xff0c;社区店正成为一个新的风口。作为一名90后的鲜奶吧创业者&#xff0c;我在社区开店已经5年时间&#xff0c;下面我将分享一些成功的社区店案例&#xff0c;并揭示其经营秘诀。 1、案例一&#xff1a;特色小吃店 这家小吃店以地方特色美食为…

MySQL安装与卸载

安装 1). 双击官方下来的安装包文件 2). 根据安装提示进行安装(全部默认就可以) 安装MySQL的相关组件&#xff0c;这个过程可能需要耗时几分钟&#xff0c;耐心等待。 输入MySQL中root用户的密码,一定记得记住该密码 配置 安装好MySQL之后&#xff0c;还需要配置环境变量&am…

平台总线--ID匹配和设备树匹配

一、ID匹配之框架代码 id匹配&#xff08;可想象成八字匹配&#xff09;&#xff1a;一个驱动可以对应多个设备 ------优先级次低 注意事项&#xff1a; device模块中&#xff0c;id的name成员必须与struct platform_device中的name成员内容一致&#xff0c;因此device模块中…

数据结构与算法-插值查找

引言 在计算机科学的广阔天地中&#xff0c;数据结构和算法扮演着至关重要的角色。它们优化了信息处理的方式&#xff0c;使得我们在面对海量数据时能够高效、准确地进行检索与分析。本文将聚焦于一种基于有序数组且利用元素分布规律的查找算法——插值查找&#xff08;Interpo…

C++面向对象程序设计-北京大学-郭炜【课程笔记(五)】

C面向对象程序设计-北京大学-郭炜【课程笔记&#xff08;五&#xff09;】 1、常量对象、常量成员函数1.1、常量对象1.2、常量成员函数1.3、常引用 2、友元&#xff08;friends&#xff09;2.1、友元函数2.2、友元类 3、运算符重载的基本概念3.1、运算符重载 4、赋值运算符的重…

二维码门楼牌管理系统应用场景:推动旅游与文化产业的智慧化升级

文章目录 前言一、二维码门楼牌管理系统在旅游领域的应用二、二维码门楼牌管理系统在文化产业的应用三、结语 前言 随着信息技术的不断发展&#xff0c;二维码门楼牌管理系统作为一种创新的信息化手段&#xff0c;正在逐渐渗透到旅游和文化领域。它通过为文化景点、旅游景点和…

ARM系统控制和管理接口System Control and Management Interface

本文档描述了一个可扩展的独立于操作系统的软件接口,用于执行各种系统控制和管理任务,包括电源和性能管理。 本文档描述了系统控制和管理接口(SCMI),它是一组操作系统无关的软件接口,用于系统管理。SCMI 是可扩展的,目前提供了以下接口: • 支持的接口的发现和自描述…

Java Map接口实现类之 HashMap

定义 public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable{static final int DEFAULT_INITIAL_CAPACITY 1 << 4; //默认初始化容积&#xff0c;就是默认数组的长度为 16static final int MAXIMUM_CAP…

keep-alive 页面切换不触发onActivated和onDeactivated方法周期

<keep-alive :include"tagList"><component :is"Component" /></keep-alive>const tagList computed(() > {return $store.state.tagList })原因&#xff1a; store.state.app.tagList返回的是一个 Proxy&#xff0c; 代理了数组&am…

openxml获取xlsx的Excel.Validation

在 Open XML SDK 中&#xff0c;无法直接使用 Excel.Range 和 Excel.Validation&#xff0c;因为这是 VSTO (Visual Studio Tools for Office) 的概念&#xff0c;而不是 Open XML SDK 的概念。Open XML SDK 提供了对 Office Open XML (OOXML) 文件格式的低级访问&#xff0c;而…

Docker上部署LPG(loki+promtail+grafana)踩坑复盘

Docker上部署LPG&#xff08;lokipromtailgrafana&#xff09;踩坑复盘 声明网上配置部署踩坑 声明 参考掘金文章&#xff1a;https://juejin.cn/post/7008424451704356872 版本高的用docker compose命令&#xff0c;版本低的用docker-compose 按照文章描述&#xff0c;主要准备…

Windows下PostgreSQL安装教程

一、下载 https://www.enterprisedb.com/downloads/postgres-postgresql-downloads

自动化测试框架有哪些?

前言 自动化测试常用的Python框架有哪些&#xff1f;常用的框架有Robot Framework、Pytest、UnitTest/PyUnit、Behave、Lettuce。Pytest、Robot Framework和UnitTest主要用于功能与单元测试&#xff0c;Lettuce和Behave仅适用于行为驱动测试。 一、Robot Framework Python测…

ASE 2023 Paper

1 CertPri: Certifiable Prioritization for Deep Neural Networks via Movement Cost in Feature Space. &#xff08;CertPri&#xff1a;通过特征空间中的移动成本对深度神经网络进行可认证的优先级排序。&#xff09; 2 Nuances are the Key: Unlocking ChatGPT to Find F…

3.8Code

基于顺序存储结构的图书信息表的新图书的入库 #include<iostream> #include<stdlib.h> #include<string.h>typedef int status;#define OK 1using namespace std;typedef struct{char no[50];char name[50];float price; }Book;typedef struct{Book* elem;i…