KNN算法

1. KNN算法概述

KNN是一种基于实例的非参数化学习算法(instance-based, non-parametric),属于监督学习懒惰学习(lazy learning)。它通过计算样本之间的距离,找到与目标样本最近的K个邻居,并根据这些邻居的标签或值进行预测。

1.1 核心思想

  • 分类任务:根据K个最近邻居的类别,通过多数投票(majority voting)决定目标样本的类别。
  • 回归任务:根据K个最近邻居的数值,取平均值(或加权平均)作为目标样本的预测值。

1.2 特点

  • 简单直观:无需显式训练模型,算法逻辑易于理解。
  • 非参数化:不假设数据的分布,适用于各种数据分布。
  • 懒惰学习:训练阶段仅存储数据,计算在预测时进行,适合动态数据。
  • 局部性:预测依赖于局部邻居,适合非线性数据。
  • 缺点:对噪声敏感、计算复杂度高(尤其在大数据集上)、对K值和距离度量敏感。

2. KNN算法工作原理

KNN的核心步骤可以概括为以下几点:

  1. 准备数据:收集并预处理训练数据集,包含特征和标签(分类)或目标值(回归)。
  2. 选择K值:确定邻居数量K(超参数)。
  3. 计算距离:对测试样本,计算其与训练集中所有样本的距离。
  4. 选择K个最近邻居:根据距离排序,选取前K个最近的样本。
  5. 预测
    • 分类:通过多数投票确定类别。
    • 回归:计算K个邻居的平均值(或加权平均)。
  6. 评估:使用测试集评估模型性能(如准确率、均方误差)。

2.1 数学表达

假设我们有一个训练数据集 D={ (x1,y1),(x2,y2),…,(xn,yn)}D = \{(x_1, y_1), (x_2, y_2), \dots, (x_n, y_n)\}D={(x1,y1),(x2,y2),,(xn,yn)},其中:

  • xi∈Rdx_i \in \mathbb{R}^dxiRd 是d维特征向量。
  • yiy_iyi 是标签(分类任务中为类别,回归任务中为实数值)。
  • 测试样本为 xxx,需要预测其标签 yyy
步骤1:计算距离

常用距离度量包括:

  • 欧几里得距离(Euclidean Distance):
    d(x,xi)=∑j=1d(xj−xi,j)2d(x, x_i) = \sqrt{\sum_{j=1}^d (x_j - x_{i,j})^2}d(x,xi)=j=1d(xjxi,j)2
  • 曼哈顿距离(Manhattan Distance):
    d(x,xi)=∑j=1d∣xj−xi,j∣d(x, x_i) = \sum_{j=1}^d |x_j - x_{i,j}|d(x,xi
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱看烟花的码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值