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

机器学习中knn的详细知识点

KNN 算法概述

K 最近邻(K-Nearest Neighbors, KNN)是一种基于实例的监督学习算法,适用于分类和回归任务。其核心思想是通过计算新样本与训练集中样本的距离,选取最近的 K 个邻居,根据这些邻居的类别或值进行预测。

KNN 的工作原理

KNN 算法通过以下步骤实现预测:

  1. 计算距离:新样本与训练集中每个样本的距离通常使用欧氏距离、曼哈顿距离或闵可夫斯基距离。
  2. 选择 K 值:确定最近的 K 个邻居,K 的选择直接影响模型的性能。
  3. 投票或平均:分类任务中采用多数投票法,回归任务中采用邻居值的平均值。

距离度量方法

KNN 常用的距离度量包括:

  • 欧氏距离:$\sqrt{\sum_{i=1}^n (x_i - y_i)^2}$,适用于连续特征。
  • 曼哈顿距离:$\sum_{i=1}^n |x_i - y_i|$,对异常值不敏感。
  • 余弦相似度:$\frac{\mathbf{x} \cdot \mathbf{y}}{|\mathbf{x}| |\mathbf{y}|}$,适合文本或高维稀疏数据。

K 值的选择

K 值的选择对模型影响显著:

  • 较小的 K:模型更复杂,容易过拟合,对噪声敏感。
  • 较大的 K:模型更平滑,但可能忽略局部特征。 常用方法包括交叉验证或经验法则(如 $K = \sqrt{n}$,n 为样本数)。

数据预处理

KNN 对数据尺度敏感,需进行标准化或归一化:

  • 标准化:$x' = \frac{x - \mu}{\sigma}$,使特征均值为 0,方差为 1。
  • 归一化:$x' = \frac{x - x_{\min}}{x_{\max} - x_{\min}}$,将特征缩放到 [0,1]。

优缺点分析

优点

  • 简单直观,无需训练阶段。
  • 适用于多分类问题。
  • 对数据分布无假设。

缺点

  • 计算复杂度高,需存储全部训练数据。
  • 对高维数据效果差(维度灾难)。
  • 对不平衡数据敏感。

优化方法

提升 KNN 性能的常见策略:

  • 降维技术:如 PCA 减少特征维度。
  • 近似最近邻(ANN):使用 KD 树、球树或哈希加速搜索。
  • 加权投票:根据邻居距离赋予不同权重。

代码示例(Python)

from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split# 数据标准化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)# 训练 KNN 模型
knn = KNeighborsClassifier(n_neighbors=5, metric='euclidean')
knn.fit(X_train, y_train)# 预测
y_pred = knn.predict(X_test)

应用场景

KNN 适用于:

  • 小规模数据集。
  • 低维特征空间。
  • 需要解释性的场景(如医疗诊断)。
http://www.lryc.cn/news/599839.html

相关文章:

  • 基于springboot的候鸟监测管理系统
  • 100条常用SQL语句大全
  • 用毫秒级视频回传打造稳定操控闭环之远程平衡控制系统技术实践
  • LE AUDIO CIS/BIS音频传输时延计算方法
  • 【神经网络概述】从感知机到深度神经网络(CNN RNN)
  • 博客多级评论展示功能实现
  • Class18卷积层的填充和步幅
  • 仙人掌cacti中的RCE案例
  • 【Python】一些PEP提案(四):scandir、类型约束,异步asyncawait
  • win11 使用adb 获取安卓系统日志
  • 黑马点评01 - 项目介绍 短信登录
  • RAG、Function Call、MCP技术笔记
  • HTML+CSS+JS快速入门
  • Jenkins中HTML文件显示样式问题解决方案
  • uniapp使用css实现进度条带动画过渡效果
  • Elasticsearch-ik分析器
  • 轮盘赌算法
  • C语言————原码 补码 反码 (试图讲清楚版)
  • 多智能体(Multi-agent)策略模式:思维链CoT和ReAct
  • Ubuntu 环境下创建并启动一个 MediaMTX 的 systemd 服务
  • 电科金仓新一代数据库一体机:以 “云数据库 - AI 版” 破局 AI 时代,三骏守护定义行业新标杆
  • 项目管理进阶——解读软件项目管理-项目阶段复盘会(通用模板)【附全文阅读】
  • 文心4.5开源之路:从封闭到开放的力量
  • ARM-I2C硬实现
  • linux-开机启动流程
  • 编程语言Java——核心技术篇(三)异常处理详解
  • 将本地项目推送到远程github仓库
  • 学习游戏制作记录(克隆技能)7.25
  • C语言|指针的应用
  • Python 之 keyboard