Python—KNN分类算法

原文: https://zhuanlan.zhihu.com/p/143092725

1. 概述

KNN 可以说是最简单的分类算法之一,同时,它也是最常用的分类算法之一。注意:KNN 算法是有监督学习中的分类算法,它看起来和另一个机器学习算法 K-means 有点像(K-means 是无监督学习算法),但却是有本质区别的。

2. 核心思想

KNN 的全称是 K Nearest Neighbors,意思是 K 个最近的邻居。从这个名字我们就能看出一些 KNN 算法的蛛丝马迹了。K 个最近邻居,毫无疑问,K 的取值肯定是至关重要的,那么最近的邻居又是怎么回事呢?其实,KNN 的原理就是当预测一个新的值 x 的时候,根据它距离最近的 K 个点是什么类别来判断 x 属于哪个类别。听起来有点绕,还是看看图吧。

3. 算法实现

3.1 Sklearn KNN参数概述
要使用 Sklearn KNN 算法进行分类,我们需要先了解 Sklearn KNN 算法的一些基本参数:

4. 算法特点

KNN是一种非参的、惰性的算法模型。什么是非参,什么是惰性呢?

非参的意思并不是说这个算法不需要参数,而是意味着这个模型不会对数据做出任何的假设,与之相对的是线性回归(我们总会假设线性回归是一条直线)。也就是说 KNN 建立的模型结构是根据数据来决定的,这也比较符合现实的情况,毕竟在现实中的情况往往与理论上的假设是不相符的。

惰性又是什么意思呢?想想看,同样是分类算法,逻辑回归需要先对数据进行大量训练(tranning),最后才会得到一个算法模型。而 KNN 算法却不需要,它没有明确的训练数据的过程,或者说这个过程很快。

5. 算法优缺点

5.1优点
简单易用。相比其他算法,KNN 算是比较简洁明了的算法,即使没有很高的数学基础也能搞清楚它的原理。
模型训练时间快,上面说到 KNN 算法是惰性的,这里也就不再过多讲述。
预测效果好。
对异常值不敏感。
5.2 缺点
对内存要求较高,因为该算法存储了所有训练数据。
预测阶段可能很慢。
对不相关的功能和数据规模敏感。

6. KNN 和 K-means比较

前面说到过,KNN 和 K-means 听起来有些像,但本质是有区别的,这里我们就顺便说一下两者的异同吧。

6.1 相同点:
K 值都是重点。
都需要计算平面中点的距离。
6.2 相异点:

KNN 和 K-means 的核心都是通过计算空间中点的距离来实现目的,只是他们的目的是不同的。KNN 的最终目的是分类,而 K-means 的目的是给所有距离相近的点分配一个类别,也就是聚类。

简单说,就是画一个圈,KNN 是让进来圈子里的人变成自己人,K-means 是让原本在圈内的人归成一类人。

至于什么时候应该选择使用 KNN 算法,Sklearn 的这张图给了我们一个答案:

在这里插入图片描述
在这里插入图片描述
简单来说,就是当需要使用分类算法,且数据比较大的时候就可以尝试使用 KNN 算法进行分类了。

补充:

Scikit-learn (Sklearn) 是机器学习中常用的第三方模块,对常用的机器学习方法进行了封装,包括回归(Regression)、降维(Dimensionality Reduction)、分类(Classfication)、聚类(Clustering)等方法。当我们面临机器学习问题时,便可根据上图来选择相应的方法。Sklearn 具有以下特点:

  • 简单高效的数据挖掘和数据分析工具;
  • 让每个人能够在复杂环境中重复使用;
  • 建立NumPy、Scipy、MatPlotLib 之上。

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

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

相关文章

山峰个数 - 华为OD统一考试

OD统一考试 分值: 100分 题解: Java / Python / C++ 题目描述 给定一个数组,数组中的每个元素代表该位置的海拔高度。0表示平地,>=1时表示属于某个山峰,山峰的定义为当某个位置的左右海拔均小于自己的海拔时,该位置为山峰。数组起始位置计算时可只满足一边的条件。 …

【Hive】——CLI客户端(bin/beeline,bin/hive)

1 HiveServer、HiveServer2 2 bin/hive 、bin/beeline 区别 3 bin/hive 客户端 hive-site.xml 配置远程 MateStore 地址 XML <?xml version"1.0" encoding"UTF-8" standalone"no"?> <?xml-stylesheet type"text/xsl" hre…

基于OHTPPS实现网站HTTPS访问

前言 笔者近期为网站配置HTTPS的域名&#xff0c;查找了大量方案&#xff0c;最近寻得一个不错的解决方式&#xff0c;通过OHTTPS获取免费的证书并部署到阿里云服务器上。 步骤 到OHTTPS官网注册账号 官方地址如下&#xff0c;读者可以先行到官网注册一下账号&#xff0c;笔…

学生管理系统 数据库版

1.写SQL语句 创建school_java数据库 创建student数据表包含 id、name姓名、tel电话、sex性别字段 往student表中加10条数据 2.写Java代码&#xff08;要求只用PreparedStatement对象&#xff0c;变化的值都用?代替&#xff09; 查询student表中所有学生信息 student表中新增三…

Android多国语言翻译 国际化

语言目录详细对应关系 Arabic, Egypt (ar-rEG) —————————–阿拉伯语&#xff0c;埃及 Arabic, Israel (ar-rIL) ——————————-阿拉伯语&#xff0c;以色列 Bulgarian, Bulgaria (bg-rBG) ———————保加利亚语&#xff0c;保加利亚 Catalan, Spain (ca-r…

解决移动端小程序事件穿透的问题

知识点&#xff1a;pointer-events 属性在移动端开发中经常用于处理事件的穿透和响应控制。 下面是对应的场景&#xff1a; 在地图上面写多个小图标&#xff0c;图标位于地图两侧并且都可以点击。要求点击图标时不触发地图的点击事件。如图&#xff1a; 相关代码如下&#xf…

C#串口通讯

在C#写串口通讯小程序时&#xff0c;可以使用System.IO.Ports命名空间提供的SerialPort类。下面是一个简单的例子&#xff0c;包含了一个基本的UI&#xff0c;用于设置串口参数和进行通讯。这里使用了Windows Forms&#xff08;WinForms&#xff09;来创建UI。 步骤&#xff1…

LabelStudio数据标注详细方法

文章目录 情感分析任务Label Studio使用指南1. label-studio 安装2. label-studio 项目创建3. 情感分析任务标注3.1 语句级情感分类任务3.2 属性级情感分析任务3.2.1 属性-情感极性-观点词抽取&#xff08;1&#xff09;Span类型标签&#xff08;2&#xff09;Relation类型标签…

PyTorch: 基于【VGG16】处理MNIST数据集的图像分类任务【准确率98.9%+】

目录 引言在Conda虚拟环境下安装pytorch步骤一&#xff1a;利用代码自动下载mnist数据集步骤二&#xff1a;搭建基于VGG16的图像分类模型步骤三&#xff1a;训练模型步骤四&#xff1a;测试模型运行结果后续模型的优化和改进建议完整代码结束语 引言 在本博客中&#xff0c;小…

antd+vue:tree组件:父级节点禁止选择并不展示选择框——基础积累

antdvue:tree组件&#xff1a;父级节点禁止选择并不展示选择框——基础积累 1.判断哪些是父节点&#xff0c;给父节点添加disabled属性——this.permissionList是数据源2.通过css样式来处理disabled的父节点3.完整代码如下&#xff1a; 最近在写后台管理系统的时候&#xff0c;…

C语言—每日选择题—Day47

第一题 1. 以下逗号表达式的值为&#xff08;&#xff09; (x 4 * 5, x * 5), x 25 A&#xff1a;25 B&#xff1a;20 C&#xff1a;100 D&#xff1a;45 答案及解析 D 本题考查的就是逗号表达式&#xff0c;逗号表达式是依次计算每个表达式&#xff0c;但是只输出最后一个表…

DRF从入门到精通一(DRF介绍、API接口、接口测试工具)

文章目录 DRF入门规范一、Web应用模式1.前后端混合开发模式2.前后端分离开发模式 二、API接口概念Json格式与XML格式的区别前端、前台、后端以及后台的区别 三、接口测试工具&#xff1a;Postman/Apifox DRF入门规范 DRF(django rest framework)是基于django的一个框架&#xf…

文心一言 VS 讯飞星火 VS chatgpt (157)-- 算法导论12.3 4题

四、用go语言&#xff0c;删除操作可交换吗?可交换的含义是&#xff0c;先删除 x 再删除 y 留下的结果树与先除 y 再删除 x 留下的结果树完全一样。如果是&#xff0c;说明为什么? 否则&#xff0c;给出一个反例。 文心一言&#xff1a; 在Go语言中&#xff0c;删除操作是不…

企业信息建设现状

信息化建设是传统计算机与互联网技术高速发展并融合的产物&#xff0c;现阶段已经成为引领产业创新的决定性技术手段。 随着信息化的不断发展与进步&#xff0c;各行各业都开始了信息化的建设与应用。信息化是未来发展的大趋势&#xff0c;企业运用信息技术可以大幅度提高员工效…

知识|基于混合模式的多余度飞控全数字仿真系统研究

*余度&#xff08;Redundancy&#xff09;&#xff1a;一种确保安全的设计手段&#xff0c;使得出现两个及以上故障时&#xff0c;才会引起既定不希望发生的工作状态。 飞行控制软件主要完成飞行传感器数据处理、飞行姿态控制和余度管理任务&#xff0c;对保证飞机安全性和可靠…

leetCode算法—2.两数相加

1.给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都不会以 0…

干货:企业如何讲好品牌故事

品牌故事讲得好&#xff0c;不仅能够体现品牌特色还能向消费者传递品牌精神的重要工具&#xff0c;优秀的品牌故事能够促进产品销量&#xff0c;为品牌带来曝光率&#xff0c;今天媒介盒子就来和大家聊聊&#xff1a;如何讲好品牌故事。 一、 品类历史和故事 品牌虽然是新品牌…

基于单片机智能家具无线遥控控制系统设计

**单片机设计介绍&#xff0c;基于单片机智能家具无线遥控控制系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的智能家具无线遥控控制系统设计可以实现对家具&#xff08;如灯具、窗帘、空调等&#xff09;的…

【Python】解读a+=b 和 a=a+b是否一样?看完恍然大悟!

文章目录 前言一、可变对象和不可变对象总结 前言 在Python中&#xff0c;对于可变和不可变对象的行为差异是一个重要概念&#xff0c;特别是在涉及到和操作时。理解这一点对于编写高效且无误的代码至关重要。 一、可变对象和不可变对象 首先&#xff0c;让我们谈谈可变和不可…

JVM的内存分区以及垃圾收集

1.JVM的内存分区 1.1方法区 方法区(永久代&#xff09;主要用来存储已在虚拟机加载的类的信息、常量、静态变量以及即时编译器编译后的代码信息。该区域是被线程共享的。 1.2虚拟机栈 虚拟机栈也就是我们平时说的栈内存&#xff0c;它是为java方法服务的。每个方法在执行的…