KNN (K-Nearest Neighbors) K 近邻分类
核心思想
KNN 是一种基于实例的懒惰学习算法:它不构建显式模型,而是在预测时直接从训练集中找到与待分类样本"最近"的
距离度量
闵可夫斯基距离
给定
特殊情况:
| 名称 | 公式 | |
|---|---|---|
| 曼哈顿距离 | ||
| 欧几里得距离 | ||
| 切比雪夫距离 |
为什么需要标准化?
当不同特征的量纲差异悬殊时(例如"年收入"以万为单位、"年龄"以十为单位),大值特征将完全主导距离计算。因此必须对所有特征执行 Z-score 标准化:
使得每个特征均值为 0、标准差为 1,确保距离度量对所有特征公平。
分类决策规则
多数投票法
对于待预测点
其中
加权投票法
可以考虑距离越近权重越大的加权方案:
值选择的偏差-方差权衡
| 偏差 | 方差 | 表现 | |
|---|---|---|---|
| 小 | 低偏差 | 高方差 | 对噪声敏感,容易过拟合 |
| 大 | 高偏差 | 低方差 | 决策边界过于平滑,欠拟合 |
最佳
KD-Tree 加速搜索
暴力搜索的时间复杂度为
- 选择方差最大的维度作为当前划分维度
- 找到该维度的中位数,将数据一分为二
- 递归构建子树
查询时复杂度平均为
代码对应
bash
python -m pipelines.classification.knn