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

机器学习中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.xdnf.cn/news/16265.html

相关文章:

  • 【面试场景题】外卖点餐系统设计思路
  • Flink 自定义类加载器和子优先类加载策略
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 主页-评论用户时间占比环形饼状图实现
  • 编程语言Java——核心技术篇(三)异常处理详解
  • Springboot+activiti启动时报错XMLException: Error reading XML
  • 深度学习day02--神经网络(前三节)
  • Elasticsearch-8.17.0 centos7安装
  • Ubuntu 环境下创建并启动一个 MediaMTX 的 systemd 服务
  • 栈与队列:数据结构核心解密
  • 链表反转算法详解
  • Fluent自动化仿真(TUI命令脚本教程)
  • springboot(3.4.8)整合mybatis
  • 【图像理解进阶】如何对图像中的小区域进行细粒度的语义分割?
  • WAIC2025预告|英码深元AI一体机将亮相华为昇腾展区,以灵活部署的能力赋能行业智能化转型
  • Nginx简单介绍
  • Java-Properties类和properties文件详解
  • 图论:最小生成树
  • classgraph:Java轻量级类和包扫描器
  • linux C — udp,tcp通信
  • 【Chrome】下载chromedriver的地址
  • 深入解析浏览器存储方案:Cookie、localStorage和sessionStorage特性与应用
  • GPU 服务器ecc报错处理
  • Java排序算法之<冒泡排序>
  • 单片机(STM32-ADC模数转换器)
  • 优思学院|QC七大手法之一的检查表应如何有效使用?
  • CSS 盒子模型学习版的理解
  • 数据结构 二叉树(1)
  • yarn在macOS上的安装与镜像源配置:全方位指南
  • 从 SQL Server 到 KingbaseES V9R4C12,一次“无痛”迁移与深度兼容体验实录
  • Orbbec开发---数据流与数据流操作