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

发布于:2025-07-27 ⋅ 阅读:(16) ⋅ 点赞:(0)

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 适用于:

  • 小规模数据集。
  • 低维特征空间。
  • 需要解释性的场景(如医疗诊断)。

网站公告

今日签到

点亮在社区的每一天
去签到