Scikit-Learn K近邻分类

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.mzph.cn/news/778618.shtml

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

相关文章

JSP基础

一、JSP JSP(全称:Java Server Pages):Java 服务端页面。是一种动态的网页技术,其中既可以定义 HTML、JS、CSS等静态内容,还可以定义 Java代码的动态内容,也就是 JSP HTML Java 。如下就是js…

【NOI】树的初步认识

文章目录 前言一、树1.什么是树?2.树的基本概念3.树的基本术语3.1 节点3.1.1 根节点3.1.2 父节点、子节点3.1.3 兄弟节点、堂兄弟节点3.1.4 祖先节点、子孙节点3.1.5 叶子节点/终端节点3.1.6 分支节点/非终端节点 3.2 边3.3 度3.3.1 树的度 3.4 层次3.4.1 树的深度3…

ERROR: No matching distribution found for tb-nightly

问题描述 安装tb-lightly失败:ERROR: No matching distribution found for tb-nightly 解决方案 因为我的镜像源默认是清华的,但是pip源中没有对应的“tb-nightly”依赖包。 如果不知道的,也可以查看一下pip的配置: python -m …

【Go】结构体中Tag标识

https://blog.csdn.net/weixin_45193103/article/details/123876319 https://blog.csdn.net/qq_49723651/article/details/122005291 https://juejin.cn/post/7005465902804123679 学一点,整一点,基本都是综合别人的,弄成我能理解的内容 Tag定…

GeoTrust SSL证书有什么优势?

GeoTrust SSL证书具备以下显著优势: 1. 市场占有率比较高:GeoTrust作为知名的SSL证书供应商,拥有广泛的市场接受度和高占有率,表明其产品受到众多企业和网站的信任和采用。 2. 品牌信誉与信任标识:在高安全性浏览器中&…

Unity3d使用Jenkins自动化打包(Windows)(一)

文章目录 前言一、安装JDK二、安装Jenkins三、Jenkins插件安装和使用基础操作 实战一基础操作 实战二 四、离线安装总结 前言 本篇旨在介绍基础的安装和操作流程,只需完成一次即可。后面的篇章将深入探讨如何利用Jenkins为Unity项目进行打包。 一、安装JDK 1、进入…

在word中显示Euclid Math One公式的问题及解决(latex公式,无需插件)

问题:想要在word中显示形如latex中的花体字母 网上大多解决办法是安装Euclid Math One。安装后发现单独的符号插入可行,但是公式中选择该字体时依然显示默认字体。 解决办法:插入公式后,勾选左上角的latex 在公式块中键入latex代码…

Go语言爬虫实战(线程池)

Go语言爬虫实战 目标 利用go语言爬取指定网站的图片。实现爬取网站任意页面所有所需的图片。实现使用go语言线程池开启多个线程爬取图片内容。最后实现创建多个文件夹存储图片。 爬取网站图片 步骤 对指定URL发去GET请求,获取对应的响应。 resp, err : http.Get(…

【JavaWeb】Day24.Web入门——HTTP协议(一)

HTTP协议——概述 1.介绍 HTTP:Hyper Text Transfer Protocol(超文本传输协议),规定了浏览器与服务器之间数据传输的规则。 http是互联网上应用最为广泛的一种网络协议http协议要求:浏览器在向服务器发送请求数据时,或是服务器在…

AI写作的力量:让你的文章焕发生机

在当今数字化时代,内容创作变得越来越重要。无论是博客文章、广告文案还是社交媒体更新,优质的文本都能吸引读者的注意力并传达信息。然而,创作过程并不总是轻松的,尤其是当我们面临灵感枯竭或时间紧迫的挑战时。这就是AI写作的力…

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

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

安卓调试桥ADB

Logcat 命令行工具 | Android Studio | Android Developers 什么是ADB ADB 全称为 Android Debug Bridge ,是 Android SDK (安卓的开发工具)中的一个工具,起到调试桥的作用,是一个 客户端 - 服务器端程序 。其中 …

【Linux】开始掌握进程控制吧

送给大家一句话: 我并不期待人生可以一直过得很顺利,但我希望碰到人生难关的时候,自己可以是它的对手。—— 加缪 开始学习进程控制 1 前言2 进程创建2.1 fork函数初识2.2 fork函数返回值2.3 写时拷贝2.4 fork常规用法2.5 fork调用失败的原因…

3月23日笔记

广播域与泛洪范围是相同的 广播:在同一个泛洪范围内,强迫交换机泛洪(主动) 泛洪(被动) ARP的工作原理:ARP先通过广播发送请求包,所有收到该广播包的设备都会将其中的源IP和源MAC相…

Oracle存数字精度问题number、binary_double、binary_float类型

--表1 score是number(10,5)类型 create table TEST1 (score number(10,5) ); --表2 score是binary_double类型 create table TEST2 (score binary_double ); --表3 score是binary_float类型 create table TEST3 (score binary_float );实验一:分别往三张表插入 小数…

OpenCV 形态学处理函数

四、形态学处理(膨胀,腐蚀,开闭运算)_getstructuringelement()函数作用-CSDN博客 数字图像处理(c opencv):形态学图像处理-morphologyEx函数实现腐蚀膨胀、开闭运算、击中-击不中变换、形态学梯度、顶帽黑帽变换 - 知乎…

JAVA面试八股文之集合

JAVA集合相关 集合?说一说Java提供的常见集合?hashmap的key可以为null嘛?hashMap线程是否安全, 如果不安全, 如何解决?HashSet和TreeSet?ArrayList底层是如何实现的?ArrayList listnew ArrayList(10)中的li…

Day24:私信列表、私信详情、发送私信

测试用户:用户名aaa 密码aaa 查询当前用户的会话列表;每个会话只显示一条最新的私信;支持分页显示。 首先看下表结构: conversation_id: 用from_id和to_id拼接,小的放前面去(因为两个人的对话应该在一个会…

Siemens S7-1500TCPU 运动机构系统功能简介

目录 引言: 1.0 术语定义 2.0 基本知识 2.1 运动系统工艺对象 2.2 坐标系与标架 3.0 运动机构系统类型 3.1 直角坐标型 3.2 轮腿型 3.3 平面关节型 3.4 关节型 3.5 并联型 3.6 圆柱坐标型 3.7 三轴型 4.0 运动系统的运动 4.1 运动类型 4.1.1 线性运动…

新手体验OceanBase社区版V4.2:离线部署单节点集群

本文源自OceanBase用户的分享 先简单总结如下: 1.本文适合初学者体验OceanBase社区版 v4.2.2 2.仅需准备一台配置为2C/8G的Linux虚拟机 3.通过离线方式安装,以便更直观地了解安装过程 一、Linux系统准备 在宿主机(即你的windows PC电脑)上安装vbox软…