机器学习中knn的详细知识点
KNN 算法概述
K 最近邻(K-Nearest Neighbors, KNN)是一种基于实例的监督学习算法,适用于分类和回归任务。其核心思想是通过计算新样本与训练集中样本的距离,选取最近的 K 个邻居,根据这些邻居的类别或值进行预测。
KNN 的工作原理
KNN 算法通过以下步骤实现预测:
- 计算距离:新样本与训练集中每个样本的距离通常使用欧氏距离、曼哈顿距离或闵可夫斯基距离。
- 选择 K 值:确定最近的 K 个邻居,K 的选择直接影响模型的性能。
- 投票或平均:分类任务中采用多数投票法,回归任务中采用邻居值的平均值。
距离度量方法
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 适用于:
- 小规模数据集。
- 低维特征空间。
- 需要解释性的场景(如医疗诊断)。