1. KNN算法概述
KNN是一种基于实例的非参数化学习算法(instance-based, non-parametric),属于监督学习和懒惰学习(lazy learning)。它通过计算样本之间的距离,找到与目标样本最近的K个邻居,并根据这些邻居的标签或值进行预测。
1.1 核心思想
- 分类任务:根据K个最近邻居的类别,通过多数投票(majority voting)决定目标样本的类别。
- 回归任务:根据K个最近邻居的数值,取平均值(或加权平均)作为目标样本的预测值。
1.2 特点
- 简单直观:无需显式训练模型,算法逻辑易于理解。
- 非参数化:不假设数据的分布,适用于各种数据分布。
- 懒惰学习:训练阶段仅存储数据,计算在预测时进行,适合动态数据。
- 局部性:预测依赖于局部邻居,适合非线性数据。
- 缺点:对噪声敏感、计算复杂度高(尤其在大数据集上)、对K值和距离度量敏感。
2. KNN算法工作原理
KNN的核心步骤可以概括为以下几点:
- 准备数据:收集并预处理训练数据集,包含特征和标签(分类)或目标值(回归)。
- 选择K值:确定邻居数量K(超参数)。
- 计算距离:对测试样本,计算其与训练集中所有样本的距离。
- 选择K个最近邻居:根据距离排序,选取前K个最近的样本。
- 预测:
- 分类:通过多数投票确定类别。
- 回归:计算K个邻居的平均值(或加权平均)。
- 评估:使用测试集评估模型性能(如准确率、均方误差)。
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}^dxi∈Rd 是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(xj−xi,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

最低0.47元/天 解锁文章
13万+

被折叠的 条评论
为什么被折叠?



