当前位置: 首页 > 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.dtcms.com/a/297155.html

相关文章:

  • Linux725 磁盘阵列RAID0 RAID1
  • OneCode3.0 Gallery 组件前后端映射机制:从注解配置到前端渲染的完整链路
  • 应用代码解释
  • 从零开始的云计算生活——番外6,使用zabbix对中间件监控
  • pycharm安装教程-PyCharm2023安装详细步骤【MAC版】【安装包自取】
  • Spring 策略模式实现
  • 配置Mac/Linux终端启动执行脚本
  • 电子电子架构 --- 软件项目的开端:裁剪
  • 现代 C++ 开发工作流(VSCode / Cursor)
  • ubuntu/centos系统ping 不通域名的解决方案
  • 清理DNS缓存
  • Ubuntu 环境下创建并启动一个 MediaMTX 的 systemd 服务
  • 缓存HDC内容用于后续Direct2D绘制.
  • 数据仓库深度探索系列 | 开篇:开启数仓建设新征程
  • 验证回文串-leetcode
  • Nginx简单介绍
  • 【STM32】Keil + FreeRTOS + HAL DMA + UART 空闲中断 接收异常
  • 【矩阵专题】Leetcode48.旋转图像(Hot100)
  • leetcode_122 买卖股票的最佳时机II
  • STM32与ADS1220实现多通道数据采集的完整分析和源程序
  • Comfyui中Upscale Image By 几种放大方法的区别
  • Java研学-RabbitMQ(三)
  • Centos7安装rabbitmq
  • RabbitMQ—HAProxy负载均衡
  • React性能优化终极指南:memo、useCallback、useMemo全解析
  • Ubuntu22 上,用C++ gSoap 创建一个简单的webservice
  • NineData 数据库 DevOps 全面支持 GaussDB,国产化管理再升级!
  • Spring Boot 自动装配底层源码实现详解
  • 国产DevOps平台Gitee:如何重塑中国企业研发效能新格局
  • Java 单元测试详解:从入门到实战,彻底掌握 JUnit 5 + Mockito + Spring Boot 测试技巧