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

【机器学习】K-Nearest Neighbor KNN算法原理简介及要点

KNN算法用于分类

    • 简介
    • KNN分类算法的流程
    • 距离度量
    • K值选择
    • 分类表决
      • 加权分类表决

简介

KNN的全称是K Nearest Neighbors. 这种算法可以被用来进行分类,原理是根据离特征点最近的K个点所属的类别进行分类。

KNN分类算法的流程

  • KNN算法的整体流程是我们需要将训练数据的特征点全部输入,这些特征点,假设有N维。
  • 输入需要预测的特征点,对这个特征点和之前所输入的训练数据的特征点,使用距离函数来求距离。
  • 选取K个距离最近的特征点,进行分类表决,即使用其中数量最多的分类来作为我们所求特征点的分类。

距离度量

KNN的输入的训练数据是N维特征向量,需要把我们已知的点的N维特征向量输入到模型中,进行预测时,需要将我们所需要预测的点的特征向量,计算其到已知的特征向量的距离,这个距离可以使用多种方式来进行计算,包括明氏距离曼哈顿距离欧式距离等。
曼哈顿距离是指的每一维度上的距离的加和。直观上来理解,就相当于我们看到了曼哈顿地区的地图,大楼方方正正,然后我们沿着地图上的路来行走,有直行有拐弯,而不是说直接穿越建筑使用直线上最短的路径来行走,这样得到的距离称为曼哈顿距离,也称为出租车距离。曼哈顿距离的概念在地图导航中经常被使用,因为我们在地图导航的时候不能直接穿过建筑,而是要沿着比较规则的路来行驶。
欧式距离,直观上理解,在数据为二维或三维时,就相当于在二维或三维空间中的两个点的直线距离。在更高维度的空间中,因为我们的特征向量有可能是N维的,所以涉及到这个问题。在向量为高维时,其计算方法就相当于两个向量的相应维度的差值的平方之和,最后取取平方根。这可以通俗的理解为二维,三维或更高维度的几何距离。

K值选择

第二个需要注意的问题是K值的选择。如果我们把K值选的过大,这样可能会导致欠拟合。假设我们取极端情况,K值等所有训练样本的特征点的数量。在这种情况下,任何一个需要判断分类的点,我们只需要输出所有特征向量中类别所对应数量最多的那个类别即可。当这个情况下,我们说出现了欠拟合(Underfit)
在K值过小的时候,会出现过拟合(Overfit)。在这种情况下,我们输入的任何数据,它的输出就是距离它最近的一个点的类别。在这种情况下,我们考虑的样本非常少,所以说难以得到其真正有实际意义的归属,分类容易被少量样本左右。
这里K值可以选一个奇数值,以防止出现多种类别数量相同的情况。

分类表决

计算完特征值后,对特征点的归属进行分类表决。分类表决就是说在K个距离最近的邻居中,哪个分类出现的次数最多,我们新的特征点就认为是哪个分类的,这是平均权值的分类表决。

加权分类表决

还有加权分类表决,可以给不同的特征点赋予不同的权重,然后以类别为分别计算加权分数,得到各个类别的最终分数,新的特征点就属于类别分数大的这一类


http://www.kler.cn/a/540995.html

相关文章:

  • 推荐一个免费的、开源的大数据工程学习教程
  • 图像锐化(QT)
  • 深入探究 Rust 测试:灵活控制测试的执行方式
  • 继承(python)
  • 云原生后端|实践?
  • 使用PyCharm进行Django项目开发环境搭建
  • echarts 鼠标移入柱状图展示手指,移入label 展示箭头
  • 美创科技获评“浙江省重点专精特新中小企业”
  • win10 llamafactory模型微调相关②
  • STL函数算法笔记
  • 【扫描件PDF】如何批量识别扫描件PDF多个区域内容保存到Excel表格,基于WPF和腾讯OCR的详细解决方案
  • 【PGCCC】commit_delay 对性能的提升:PostgreSQL 基准测试
  • 25自动化考研复试面试常见核心问题真题汇总,自动化考研复试面试有哪些经典问题?自动化考研复试难不难啊?
  • 如何在 React 中使用 CSS Modules?
  • 给milvus添加账号密码
  • 【C++高并发服务器WebServer】-15:poll、epoll详解及实现
  • 【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
  • 如何通过腾讯 ima.copilot 训练自己的知识库
  • 一个简单的Windows TCP服务器实现
  • 【网络法医】Docker取证
  • STM32-知识
  • C语言中隐式类型转换 截断和整型提升
  • Spring Security 学习大纲
  • CSDN 博客之星 2024:肖哥弹架构的社区耕耘总结
  • 在微服务中,如何使用feign在各个微服务中进行远程调用
  • 通过 SQLAlchemy 实现多表映射