Scikit-Learn K近邻分类

news/2024/4/27 19:52:40/文章来源:https://blog.csdn.net/weixin_55629186/article/details/137020269

Scikit-Learn K近邻分类

    • 1、K近邻分类
      • 1.1、K近邻分类及原理
      • 1.2、超参数K
      • 1.3、K近邻分类的优缺点
    • 2、Scikit-Learn K近邻分类
      • 2.1、Scikit-Learn K近邻分类API
      • 2.2、K近邻分类实践(鸢尾花分类)
      • 2.3、交叉验证寻找最佳K
      • 2.4、K近邻分类与Pipeline



1、K近邻分类


K近邻是一种常用的分类算法。K近邻在机器学习知识结构中的位置如下:

在这里插入图片描述

1.1、K近邻分类及原理


K近邻(K-Nearest Neighbors,KNN)又称最近邻,意思是K个最近的邻居,是一种有监督的学习分类器,虽然它可以用于回归问题,但它通常用作分类算法

KNN算法的历史最早可以追溯到1951年,当时Evelyn Fix和Joseph Hodges提出了“最近邻模型”的概念;1957年,Cover和Hart扩展了他们的概念;1992年,Altman发表的一篇名为“K-Nearest Neighbors”的文章,使得该算法真正得到了广泛的认知和应用

然而,随着数据集的增长,KNN变得越来越低效,影响了模型的整体性能。KNN虽然不能像以前那么受欢迎,但由于其简单性和准确性,使得它仍然是数据科学中的首选算法之一。它通常用于简单的推荐系统、金融市场预测、数据预处理(缺失数据估计插补)等

K近邻假设可以在实例彼此附近找到相似点,根据比重分配类别标签,使用在给定数据点周围最多表示的标签。KNN算法的基本原理是:在特征空间中,如果一个样本最接近的K个邻居中大多数属于某一个类别,则该样本也属于这个类别。这在技术上被称为多数表决(Plurality Voting)

在这里插入图片描述

例如,K=3,KNN算法就会找到与预测点距离最近的三个点(如图中圆圈所示),看看哪种类别多一些,就将预测点归为哪类,图示表示预测点将会被归类到Class B

成功的诀窍在于如何确定数据实例之间的相似性,即怎么算是最近?因此,在进行分类之前,必须先定义距离。常见的距离度量有:欧几里得距离(p=2)、曼哈顿距离(p=1)、闵氏距离(详见:传送门)等

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

1.2、超参数K


K-NN算法中的K值定义了将检查多少个邻居以确定查询点的分类。例如,当K=1时,实例将被分配到与其单个最近邻相同的类

K是一种平衡行为,因为不同的值可能会导致过拟合或欠拟合。较小的K值可能具有较高的方差和较低的偏差,较大的K值可能导致较高的偏差和较低的方差

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

交叉验证(详见:传送门)会将样本数据按照一定比例拆分成训练数据和验证数据,然后从选取一个较小的K值开始,不断增加K的值,然后计算验证数据的误差,最终找到一个比较合适的K值

一般情况下,K与模型的Validation Error(模型应用于验证数据的错误)的关系如下图所示:

在这里插入图片描述

这个图其实很好理解,当K值增大时,一般错误率会降低,因为周围有更多的样本可以借鉴了;但需要注意的是,和K-Means不同,当K值很大时,错误率会更高,例如我们共有35个样本,当K增大到30时,数据的预测会把更多距离较远的数据也放入比较,最终导致预测偏差较大。相反,K值越小,则模型越过拟合。因此,我们需要针对特定问题选择一个最合适的K值,以保证模型的效果最佳

1.3、K近邻分类的优缺点


优点:

  • 超参数少,只需要一个K值和一个距离度量,易于理解和使用,预测效果较好
  • 基于内存,在数据集较小时可以快速地进行训练和预测
  • 对异常值不敏感,根据最邻近实例的类别来进行投票,从而降低了异常值对结果的影响
  • 对数据预处理要求较低,KNN不需要对数据进行复杂的预处理,例如标准化、归一化等

缺点:

  • 在数据集较大时,需要较大的存储空间和较长的计算时间,从时间和金钱的角度来看,这可能是昂贵的
  • 容易出现过拟合,较小的K值可能会过度拟合数据,K值太大,模型可能会欠拟合
  • 对噪声数据敏感,如果数据集中存在噪声数据,KNN算法可能会受到较大影响
  • 对高维数据输入表现不佳,也称峰值现象,在算法达到最佳特征数量后,额外的特征会增加分类错误的数量

2、Scikit-Learn K近邻分类

2.1、Scikit-Learn K近邻分类API


Scikit-Learn实现了两个不同的最近邻分类器:KNeighborsClassifier分类器根据每个查询点的K个最近邻实现学习,其中K是用户指定的整数值。RadiusNeighborsClassifier分类器根据每个训练点的固定半径r内的邻居数实现学习,其中r是用户指定的浮点值

K近邻分类模型sklearn.neighbors.KNeighborsClassifier的API具体如下:

class sklearn.neighbors.KNeighborsClassifier(n_neighbors=5, *, weights='uniform', algorithm='auto', leaf_size=30, p=2, metric='minkowski', metric_params=None, n_jobs=None)

官方对该API的功能描述如下:

最近邻学习有两种方式:离散标签数据的分类和连续标签数据的回归。最近邻方法背后的原理是找到在距离上离新样本最近的一些样本, 并且从这些样本中预测标签。最近邻的样本数可以是用户定义的常数(K-最近邻),也可以根据不同的点的局部密度(基于半径的近邻学习)确定。一般来说,距离可以用任意来度量:标准的欧氏距离是最常见的选择

API官方文档:https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html

API中文官方文档:https://scikit-learn.org.cn/view/695.html

RadiusNeighborsClassifier分类器官方文档:https://scikit-learn.org.cn/view/704.html

API参数及说明如下:

参数说明
n_neighborsKNN算法中的K值,选取最近的K个点,默认值为5
weights预测中使用的权重函数,默认为uniform,表示统一权重,每个邻域中的所有点均被加权(权重相等);其他还有distance,表示权重点与其距离的倒数,这种情况下,距离近的点比距离远的点影响大,另外,还支持用户自定义的函数
algorithm用于计算最近邻的算法,默认为autoball_tree将使用BallTree;kd_tree将使用KDTree;brute将使用暴力搜索;
leaf_size用于指定传递给给BallTree或KDTree构建叶子节点时使用的最小样本数,默认为30。这会影响构造和查询的速度,以及存储树所需的内存

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

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

相关文章

ES学习日记(一)-------单节点安装启动

基于ES7.4.1编写,其实一开始用的最新的8.1,但是问题太多了!!!!不稳定,降到7.4 下载好的安装包上传到服务器或虚拟机,创建ES目录,命令mkdir -p /路径xxxx 复制安装包到指定路径并解压: tar zxvf elasticsearch-8.1.0-linux-x86_64.tar.gz -C /usr/local/es/ 进入bin目录安装,命…

bugku-web-Flask_FileUpload

查看页面源码 这里提示给他一个文件,它将返回一个python运行结果给我,并且提示只能上传jpg和png文件 传递一个图片 查看源码 传递一个非图片 将源码写入新建的txt文件中 print(hello world) 将文件后缀改为jpg 上传 上传成功 查看源码 得到运行结果 我…

SpringMVC第一个helloword项目

文章目录 前言一、SpringMVC是什么?二、使用步骤1.引入库2.创建控制层3.创建springmvc.xml4.配置web.xml文件5.编写视图页面 总结 前言 提示:这里可以添加本文要记录的大概内容: SpringMVC 提示:以下是本篇文章正文内容&#xf…

​python学习之变量类型​

print单纯输中的十种数据类型只需要用print()函数即可,()里面直接写变量名。 下面重点介绍print格式输出: 第一种方法:一个萝卜一个坑,下面的代码中,{0}、{1}、{2}分别表示j,i,j*i,单引号里面是输出格式。…

WPF 多路绑定、值转换器ValueConvert、数据校验

值转换器 valueconvert 使用ValueConverter需要实现IValueConverter接口,其内部有两个方法,Convert和ConvertBack。我们在使用Binding绑定数据的时候,当遇到源属性和目标控件需要的类型不一致的,就可以使用ValueConverter&#xf…

将html文件转化为pdf

1.用浏览器将html文件打开 2.空白处右键点击打印 3.另存为PDF即可

day72Html

常用标签: 分类: 块级标签:独立成行 行级标签:不独立成行,同一行可放多个行级标 注意网页显示时,忽略空白字符,(回车符,空格,tab制表符) 一)块级标签&#xf…

【MATLAB源码-第20期】基于matlab的短波通信多径信道仿真,多径数目为3,用QPSK来测试误码率效果输出误码率对比图。

操作环境: MATLAB 2022a 1、算法描述 短波通信是一种使用短波频段的无线电通信技术,它具有以下特点: 1. 频段范围:短波通信通常使用3MHz到30MHz之间的频段。这个频段之所以称为“短波”,是因为它的波长相对较短&am…

Prometheus +Grafana +node_exporter可视化监控Linux + windows虚机

1、介绍 待补充 2、架构图 Prometheus :主要是负责存储、抓取、聚合、查询方面。 node_exporter :主要是负责采集物理机、中间件的信息。 3、搭建过程 配置要求:1台主服务器 n台从服务器 (被监控的linux或windows虚机&am…

基于js css的瀑布流demo

要实现照片按照瀑布流展示&#xff0c;写个小demo&#xff0c;记录下。 瀑布流实现思路如下&#xff1a; CSS 弹性布局对 3 列按横向排列&#xff0c;对每一列内部按纵向排列 html代码&#xff1a; <div class"content"></div> css代码&#xff1a; …

【leetcode】环形链表的约瑟夫问题

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家刷题&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 点击查看题目 首先我们要明确一点&#xff0c;题目要求我们要用环形链表&#xff0c;所以用数组等是不被允…

网站为什么要选择使用安全加速SCDN?

安全加速SCDN&#xff08;安全内容交付网络&#xff09;是一种网络加速服务&#xff0c;旨在提高网站和应用程序的性能和安全性。它使用专门的技术和基础设施来加速内容传输并保护网站免受网络攻击。 安全加速SCDN可以通过内容缓存、快速传输和动态路由技术来加速网站和应用程…

FPGA时钟资源详解(3)——全局时钟资源

FPGA时钟系列文章总览&#xff1a;FPGA原理与结构&#xff08;14&#xff09;——时钟资源https://ztzhang.blog.csdn.net/article/details/132307564 一、概述 全局时钟是 FPGA 中的一种专用互连网络&#xff0c;旨在将时钟信号分配到 FPGA 内各种资源的时钟输入处。这种设计…

【黑马头条】-day04自媒体文章审核-阿里云接口-敏感词分析DFA-图像识别OCR-异步调用MQ

文章目录 day4学习内容自媒体文章自动审核今日内容 1 自媒体文章自动审核1.1 审核流程1.2 内容安全第三方接口1.3 引入阿里云内容安全接口1.3.1 添加依赖1.3.2 导入aliyun模块1.3.3 注入Bean测试 2 app端文章保存接口2.1 表结构说明2.2 分布式id2.2.1 分布式id-技术选型2.2.2 雪…

【全栈小5】我的创作纪念日

目录 前言机缘收获粉丝和原创个人成就六边形战士 回顾文章原代码代码优化 憧憬 前言 全栈小5 &#xff0c;有幸再次遇见你&#xff1a; 还记得 2019 年 03 月 29 日吗&#xff1f; 你撰写了第 1 篇技术博客&#xff1a; 《前端 - 仿动态效果 - 展开信息图标》 在这平凡的一天&…

Matlab之求直角坐标系下两直线的交点坐标

目的&#xff1a;在直角坐标系下&#xff0c;求两个直线的交点坐标 一、函数的参数说明 输入参数&#xff1a; PointA&#xff1a;直线A上的点坐标&#xff1b; AngleA&#xff1a;直线A的倾斜角&#xff0c;单位度&#xff1b; PointB&#xff1a;直线B上的点坐标&#xf…

Git命令及GUI基本操作

不习惯使用Git命令的可移步下面Git GUI基本操作 Git 常用命令 git branch 查看本地所有分支 git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支 git branch -r 查看本地所有分支 git commit -am "init" 提交并且加注释 git remote add orig…

Linux根据时间删除文件或目录

《liunx根据时间删除文件》和 《Linux 根据时间删除文件或者目录》已经讲述了根据时间删除文件或目录的方法。 下面我做一些补充&#xff0c;讲述一个具体例子。以删除/home目录下的文件为例。 首先通过命令&#xff1a; ls -l --time-style"%Y-%m-%d %H:%M:%S"…

上位机图像处理和嵌入式模块部署(qmacvisual几何测量)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 几何测量是图像处理中经常遇到的一个问题&#xff0c;前面我们曾经讨论过点到直线的距离。不仅如此&#xff0c;qmacvisual还提供了另外三个常用的…

RTSP应用:实现视频流的实时推送

在实现实时视频流推送的项目中&#xff0c;RTSP&#xff08;Real Time Streaming Protocol&#xff09;协议扮演着核心角色。本文将指导你通过安装FFmpeg软件&#xff0c;下载并编译live555&#xff0c;以及配置ffmpeg进行视频流推送&#xff0c;来实现一个基本的RTSP流媒体服务…