KNN算法思路分析
1 课程概览
本课详细对比KNN算法在分类和回归两种任务中的实现思路,梳理前三步相同(算距离、排序、选K个)、第四步不同(分类投票、回归均值)的流程差异,并强调K值选择的重要性及超参数选择方法(交叉验证和网格搜索)。
2 核心概念与定义
- 分类(Classification):标签不连续的监督学习问题,通过投票(多数表决)决策。
- 回归(Regression):标签连续的监督学习问题,通过求均值决策。
- 多数表决(Majority Voting):K个邻居中哪个类别最多就选哪个。
- 超参数(Hyperparameter):需要用户手动输入的参数,如KNN中的K值。
- 交叉验证(Cross Validation):寻找最优超参数的方法。
- 网格搜索(Grid Search):寻找最优超参数的方法。
3 算法与模型详解
3.1 分类与回归的相同点
| 比较维度 | 分类 | 回归 |
|---|---|---|
| 学习方式 | 监督学习 | 监督学习 |
| 特征 | 有 | 有 |
| 标签 | 有 | 有 |
| 标签类型 | 不连续(离散) | 连续(数值型) |
3.2 KNN分类与回归流程对比
| 步骤 | 分类 | 回归 |
|---|---|---|
| 第1步 | 计算未知样本到每个训练样本的距离 | 计算未知样本到每个训练样本的距离 |
| 第2步 | 距离升序排列 | 距离升序排列 |
| 第3步 | 取出最近的K个样本 | 取出最近的K个样本 |
| 第4步 | 多数表决:统计K个样本中各类别数量,票数最多的类别作为预测结果 | 求均值:将K个样本的目标值取平均值,作为预测结果 |
前三步完全相同,第四步不同。
3.3 分类问题——多数表决
- 统计K个邻居中各类别的数量。
- 票数最多的类别作为预测结果。
- 若票数相同,选择距离最近的类别(奥卡姆剃刀原则)。
示例:K=5时,3票喜剧、1票爱情、1票动作 → 预测为喜剧。
3.4 回归问题——求均值
- 将K个邻居的目标值(标签)相加求平均。
- 平均值作为预测结果。
- 前提:标签必须是数值型,才能计算均值。
示例:K=5时,5个邻居的房价分别为100、120、110、105、115万 → 预测房价 = (100+120+110+105+115)/5 = 110万。
⚠️字符串型标签(如"爱情片")无法求均值,只能用于分类问题。
3.5 K值选择与拟合关系
| K值 | 拟合情况 | 原因 |
|---|---|---|
| K值过小(如K=1) | 过拟合 | 数据量少,模型学到脏数据,模型复杂 |
| K值过大(如K=N) | 欠拟合 | 模型简单,投票结果永远是多数类 |
极端情况分析:
- K=1:只看最近的一个邻居,容易受异常点影响 → 过拟合。
- K=N(N为样本总数):所有人投票,结果永远是数量最多的类别 → 欠拟合。
3.6 超参数选择方法
| 方法 | 说明 |
|---|---|
| 交叉验证(Cross Validation) | 寻找最优超参数 |
| 网格搜索(Grid Search) | 寻找最优超参数 |
超参数选择结果仅供参考,数据量越大,结果越准确。一般K值取较小的数值。
4 数学原理与推导
4.1 欧式距离公式
$$d = \sqrt{\sum_{i=1}^{n}(x_i - y_i)^2}$$
- $x_i$:样本x的第i个特征值
- $y_i$:样本y的第i个特征值
- $n$:特征维度数
4.2 回归预测公式
$$\hat{y} = \frac{1}{K}\sum_{i=1}^{K} y_i$$
- $\hat{y}$:预测值
- $K$:最近邻居数量
- $y_i$:第i个邻居的目标值
5 代码示例
本课无完整代码,后续将结合鸢尾花案例和手写数字识别案例实现。
6 重难点与易错提醒
- ❗重点:分类=投票(多数表决);回归=均值(平均值)。
- ❗重点:KNN流程前三步相同(算距离、排序、选K个),第四步不同(分类投票/回归均值)。
- ❗重点:K值过小→过拟合;K值过大→欠拟合。
- ⚠️易错:回归问题的标签必须是数值型,字符串型标签无法求均值。
- ⚠️易错:K值过大时,模型不容易受到异常值影响(因为样本多,异常值影响被稀释)。
- 💡深入理解:K=N时,无论输入什么样本,预测结果永远是训练集中数量最多的类别,模型过于简单。
7 课堂问答精选
Q: K值过大时,模型是否更容易受到异常值影响?
A: 不是。K值过大时,样本数量多,异常值的影响被稀释。例如班级100人中有1个90岁的异常值,对平均年龄影响很小;但如果只有10人,影响就很大。
Q: K值和训练集样本数相同时会发生什么?
A: 会导致欠拟合。K=N时,所有人投票,结果永远是训练集中数量最多的类别,模型过于简单,忽略其他数据特征。
Q: 实际工作中如何选择最优K值?
A: 通常使用交叉验证和网格搜索寻找最优K值。一般情况下K值取较小的数值,不会选太大。
8 本课小结
- 分类=投票(多数表决);回归=均值(平均值)。
- KNN流程:算距离→升序排列→选K个→投票/均值。
- 前三步相同,第四步分类与回归不同。
- K值过小→过拟合;K值过大→欠拟合。
- 超参数选择:交叉验证+网格搜索,K值一般取较小数值。
9 延伸思考与实践
- 思考:为什么回归问题的标签必须是数值型?
- 思考:K值过大时为什么不容易受异常值影响?
- 预习:交叉验证和网格搜索的具体实现方法。