当前位置: 首页 > news >正文

【机器学习】k最近邻分类

📝本文介绍
本文为作者阅读鸢尾花书籍以及一些其他资料的k最近邻分类后,所作笔记

👋作者简介:一个正在积极探索的本科生
📱联系方式:943641266(QQ)
🚪Github地址:https://github.com/sankexilianhua
🔑Gitee地址:https://gitee.com/Java_Ryson
由于本人的知识所限,如果文章有问题,欢迎大家联系并指出,博主会在第一时间修正。

文章目录

  • 📕1. 原理
  • 📘2. 流程
  • 📙3. 分类
    • 📖3.1 二分类
    • 📖3.2 三分类
    • 📖3.3 k值的影响
  • 📗4. k-nn变种
    • 📖4.1 对投票权重的处理
    • 📖4.2 最近质心分类器(NCC)

📕1. 原理

K 最近邻 (KNN) 算法是一种非参数化的监督学习分类器,它利用邻近度来对单个数据点的分组进行分类或预测。 它是当今机器学习中使用的最广泛且最简便的分类与回归分类器之一。 k近邻算法,也称为 KNN 或 k-NN,是一种非参数、有监督的学习分类器,KNN 使用邻近度对单个数据点的分组进行分类或预测。
优点:

  • 简单
  • 不需要训练过程
  • 对非线性分类问题表现良好

缺点:

  • 需要大量存储训练集
  • 预测速度较慢
  • 对高维数据容易出现维数灾难

核心思想:小范围投票,少数服从多数

📘2. 流程

给定样本数据X( x ( 1 ) , x ( 2 ) , x ( 3 ) , . . . x^{(1)},x^{(2)},x^{(3)},... x(1),x(2),x(3),...,分别对应已知标签 y ( 1 ) , y ( 2 ) , y ( 3 ) , . . . y^{(1)},y^{(2)},y^{(3)},... y(1),y(2),y(3),....查询点q标签未知,待预测分类。

  • 计算样本数据X任意一点x和查询点q的距离
  • 找X中距离查询点q最近的k个样本,即k个”近邻“
  • 根据k个邻居已知标签,直接投票或加权投票;k个邻居出现数量最多的标签即为查询点q预测分类结果

📙3. 分类

📖3.1 二分类

有一组数据集两个特征( x 1 , x 2 x_1,x_2 x1x2)(特征显然也可以不止两个),有两类标签, c 1 , c 2 c_1,c_2 c1,c2,c1表示红色,c2表示蓝色。在其中随便查找一个点q,这个点属于哪一类?

显然,这里的任一点x和q的距离可以看作是两点之间的距离。k就是指定几个近邻(按距离远近来排,看要取几个点)。
在这里插入图片描述
这里就可以看出,采用k=4的话,选择4个最近的点,统计他们的标签,最后少数服从多数,可以得到q的一个归属。

这里要注意:k是一个超参数,对其设定的不同,会影响到最后对于q归属的判定。

sklearn.neighbors.KNeighborsClassifier 为 Scikit-learn工具包k-NN分类算法函数默认的近邻数量n_neighbors为5默认距离量metric为欧氏距离常用的methods为fit(x,y):拟合样本数据predit(q):预测查询点q的分类

📖3.2 三分类

三分类,实际上是有三类标签,其他的都与二分类差不多。
在这里插入图片描述
图中蓝色的线称为决策边界

  • 若决策边界为直线,平面,或超平面,那么这个分类问题是线性的。否则,该问题是非线性的。

  • 如果决策边界可以使用简单或复杂的函数来表示,那么该模型称为参数模型。类似k-NN这样的学习算法得到的决策边界为非参数模型

泛化能力:指机器学习算法对全新样本的适应能力。适应能力越强,泛化能力越强。

k-NN基于训练数据,更准确地说是把训练数据以一定的形式存储起来完成学习任务

📖3.3 k值的影响

k值为用户输入值(即:超参数),其会影响到决策边界的形成。

  • 较小的k值能准确捕捉训练数据的分类模式;但,容易受到噪声的影响、
  • 较大的k值能够抑制噪声的影响;但分类界限不明显

为什么会影响?

  在KNN中,不论要分多少个类,实际上决定计算次数的还是超参数K,它决定了取四周最近的多少个点来确定,那么一旦范围扩大,就有可能包含更多的点,对分类的结果就会有所影响。影响分类的结果,自然而然就会影响到决策边界的形成。

📗4. k-nn变种

在原本的knn中,所有点的投票权重都是相同的(即等权重投票)。但是,很多knn也可以使用加权投票的方式,有时会更加有效。

📖4.1 对投票权重的处理

距离查询点越近的近邻,投票权重越高;越近的近邻,投票权重越低。

实际sklearn库中可以使用:sklearn.neighbors.KNeighborsClassifier 来实现,使用其来设定投票权重

此外,也可以将近邻投票权归一化处理:

w i = m a x ( d N N ) − d i m a x ( d N N ) − m i n ( d N N ) w_i={max(d_{NN})-d_i \over max(d_{NN})-min(d_{NN})} wi=max(dNN)min(dNN)max(dNN)di

这样,距离随着距离增大,权重逐渐减小。

归一化:
  
将一列数据变化到某个固定区间(范围)中,通常,这个区间是[0, 1] 或者(-1,1)之间的小数。主要是为了数据处理方便提出来的,把数据映射到0~1范围之内处理,更加便捷快速。

📖4.2 最近质心分类器(NCC)

数据质心

μ k = 1 c o u n t ( C k ) i = C k Σ i = C k X ( i ) {μ_k = {1 \over count(C_k)_{i=C_k}}}Σ_{i=C_k}X^{(i)} μk=count(Ck)i=Ck1Σi=CkX(i)

也就是每一组向量的相同位置的元素,相加之后取平均值。所以实际上的 μ k = { E ( x 1 ) , E ( x 2 ) , . . . } {μ_k=\{E(x_1),E(x_2),...\}} μk={E(x1),E(x2),...}

最质心分类器原理

先求解得到不同类别样本数据簇质心位置 μ m μ_m μm查询点q距离哪个分类质心越近,其预测分类则被划定为这一类

最质心分类器,不需要设定最近邻数量k

python工具包完成最近质心分类的函数为:sklearn.neighbors.NearestCentroid

同时,可以发现,多个类别之间的分类线,其实就是不同质心之间的中垂线。

在这里插入图片描述

收缩阈值

sklearn.neighbors.NearestCentroid函数同时也提供收缩阈值,以获得最近收缩质心。

即:随着收缩阈值的增大,各类数据的质心会向着数据总质心靠近,那么分类边界也会随之不断变化
在这里插入图片描述


http://www.mrgr.cn/news/67181.html

相关文章:

  • 【网络安全】|nessus使用
  • rediss数据结构及其底层实现
  • spring-boot(热部署)
  • Linux 无名管道
  • 【Wi-Fi】802.11n Vs 802.11ac 整理
  • Pod安装软件将CDN改为国内的镜像
  • Android中Activity启动的模式
  • python验证码滑块图像识别
  • 基于SSM的校园美食交流系统【附源码】
  • 法语vous voulez
  • LoRA:大型语言模型(LLMs)的低秩适应;低秩调整、矩阵的低秩与高秩
  • 算法——双指针
  • C++builder中的人工智能(7)如何在C++中开发特别的AI激活函数?
  • Redis的内存淘汰机制
  • MySQL 批量删除海量数据的几种方法
  • 【算法】(Python)贪心算法
  • 解决return code from pthread_create() is 22报错问题
  • 数据结构 ——— 链式二叉树oj题:相同的树
  • mqtt 传递和推送 温湿度计消息 js
  • 盘点10款录音转文字工具,帮你开启高效记录。
  • 架构零散知识点
  • 看到你还在用Maven,Gradle难道不香吗?
  • 接口测试用例设计的关键步骤与技巧解析
  • 深度学习:循环神经网络(RNN)详解
  • openssl生成加密,公钥实现非对称加密
  • 通过 SSH 连接远程 Ubuntu 服务器