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

物以类聚,人以群分的KNN算法(上)

什么是KNN

有天,你想着把你另外一套房子租出去,这样还能减轻一下生活的负担。但是你却不知道把房租定为多少比较合适。这时候你就在业主群里加了几个房子已经出租的房主,分别询问了他们的楼层高度、房屋面积、采光率等因素以及他们出租的价格。然后你找到两三个跟你房间差不多情况的,得知他们的出租价格都在a元左右,你就想着:得了,我的房子出租价格也定为a元吧。

这种“根据相似房屋价格确定自己房屋价格”的思维方式,就是K近邻(K-Nearest Neighbors,KNN)算法的核心思想!

KNN是由 Cover 和 Hart 于 1968 年提出的经典机器学习算法,属于监督学习方法,它的工作机制比较简单,通俗点说就是“物以类聚,人以群分”。它给定测试样本,根据某种的距离度量找出训练集中跟它最近的k kk个训练样本,然后基于这k kk个邻居的信息,来对结果进行预测。

KNN与之前介绍的线性回归、逻辑回归不同,它是有名的“惰性学习”的代表,它在训练阶段只是把样本保存好,在有测试样本来了,才在训练集中找到与测试样本相近的k kk个邻居样本,并根据这些邻居样本给出测试样本的最终结果。

应用场景

KNN做为常见的机器学习算法,常见的应用场景如下:

  • 分类:垃圾邮件分类、物体识别等

  • 回归:销量预测、房价预测、气温预测等。

KNN基本原理

核心思想

KNN的原理可以概况为:给定一个训练数据集,对于新的输入样本,在训练集中找到跟这个样本最邻近的k kk个实例,根据这k kk个示例的标签值,得到新输入样本的预测值。

要想用好KNN,就得先搞清楚以下这三个问题:如何判断最邻近,如何选择合适得k值,以及如何得出最终预测值?

距离计算

在我们日常生活中,说两个人很近,可以是住得近、每天在一起时间很多、共同爱好很多等。在特征空间中两个样本点的距离是两个样本点相似度的反映。KNN中特征空间一般是n nn维实数向量空间R n \mathbf{R}^nRn, 使用的是欧式距离。但是也可以是其他距离,比如更一般的L p L_pLp距离。

假设特征空间X \mathcal{X}Xn nn维的实数向量空间R n \mathbf{R}^nRnx i , x j ∈ X , x i = ( x i ( 1 ) , x i ( 2 ) , . . . , x i ( n ) ) T , x j = ( x j ( 1 ) , x j ( 2 ) , . . . , x j ( n ) ) T x_i,x_j\in{\mathcal{X}}, \quad x_i=(x_i^{(1)}, x_i^{(2)},...,x_i^{(n)})^T,\quad x_j=(x_j^{(1)}, x_j^{(2)},...,x_j^{(n)})^Txi,xjX,xi=(xi(1),xi(2),...,xi(n))T,xj=(xj(1),xj(2),...,xj(n))T

  • 闵可夫斯基距离

x i , x j x_i,\quad x_jxi,xjL p L_pLp距离为:
L p ( x i , x j ) = ( ∑ l = 1 n ∣ x i ( l ) − x j ( l ) ∣ p ) 1 p L_p(x_i, x_j) = (\sum_{l=1}^n|x_i^{(l)}-x_j^{(l)}|^p)^{\frac{1}{p}}Lp(xi,xj)=(l=1nxi(l)xj(l)p)p1
在这里p ≥ 1 p\geq1p1,当p pp分别取 1、2、∞ \infty时,则分别为曼哈顿距离、欧式距离和切比雪夫距离。

  • 曼哈顿距离

曼哈顿距离是各个维度的坐标差之和。其计算公式为:
L 1 ( x i , x j ) = ∑ l = 1 n ∣ x i ( l ) − x j ( l ) ∣ L_1(x_i, x_j) = \sum_{l=1}^n|x_i^{(l)}-x_j^{(l)}|L1(xi,xj)=l=1nxi(l)xj(l)
假设你在坐标点( 1 , 1 ) (1, 1)(1,1),距离坐标( 3 , 4 ) (3, 4)(3,4)的曼哈顿距离L = ∣ 1 − 3 ∣ + ∣ 1 − 4 ∣ = 5 L=|1-3|+|1-4|=5L=∣1

http://www.cnnetsun.cn/news/105872.html

相关文章:

  • 如何快速掌握Obsidian剪藏工具:新手用户的完整操作指南
  • 【2025护网】面试及经验分享(非常详细),零基础入门到精通,看这一篇就够了
  • 【数据库】金仓数据库:不止于兼容,更致力于成为企业的增长引擎
  • 【开题答辩全过程】以 基于javaweb的高校招生管理系统设计与实现为例,包含答辩的问题和答案
  • 【阿里淘天大模型面试揭秘】:17个核心问题及独家解答,助你轻松通关终面!
  • JavaScript DOM 原生部分(二):元素内容修改
  • 风能太阳能供电的路灯智能控制系统(论文+源码)
  • 没有测试用例,怎么才能确保测试全面?
  • Jmeter分布式测试必踩坑,全部帮你排雷
  • 13.常见的异常类有哪些?
  • 【Q#量子编程效率革命】:揭秘VSCode重构工具的5大核心技巧
  • 为什么你的Buildx构建总失败?一文看懂构建上下文陷阱(90%的人都忽略了)
  • 【VSCode Jupyter量子模拟内核深度解析】:掌握高效量子计算开发的5大核心技巧
  • OpenBoard输入法:安卓平台智能输入终极解决方案
  • 终极方案:如何用SUSFS4KSU模块实现完美内核级Root隐藏
  • 完整Blender插件清单:从建模到渲染的终极工具指南
  • 【VSCode量子编程效率革命】:批量提交作业的5大核心技巧与实战指南
  • 2026破局:以营销自动化成熟度Macom模型为鞍,驰骋增长新赛道!
  • RookieAI_yolov8:基于YOLOv8的计算机视觉辅助系统技术解析
  • 网络安全专业全方位解析,这个专业能学明白,就业绝对是王者。从零基础入门到高薪就业,收藏这篇就够了!
  • 【量子编程进阶之路】:为什么顶级工程师都在用VSCode运行QML模型?
  • 32、打造家庭与小型办公网络安全防护体系
  • AI智能体:完整课程(初级)
  • 震惊!大模型在AIOps中竟有6大“死穴“!小白程序员避坑必看,从工具到智能要素的蜕变之路!
  • GSE宏编译器:魔兽世界玩家的技能循环自动化神器
  • DeeplxFile:突破文件翻译限制的终极解决方案
  • 针对机械设备行业一体化项目制管理解决方案
  • 别再问资质认证怎么查了!看这家公司如何用“大模型搜索”帮客户7天拿下高新认证
  • 【量子编程数据同步新突破】:如何在Q#和Python间无缝传递变量?
  • Java后端开发常见报错及解决方案:小白与大牛的问答故事