KNN(K-Nearest Neighbors,K最近邻算法)是一种基于实例的学习方法,主要用于分类和回归任务。它的核心思想是:对于一个新的数据点,KNN会根据距离该点最近的K个训练数据点的标签来进行预测。
- 分类问题:KNN通过多数投票来决定新数据点的类别,K个邻居中出现次数最多的类别将作为预测结果。
- 回归问题:KNN通过计算K个邻居的平均值来预测新数据点的数值。
主要步骤:
- 选择K值:确定K(最近邻的数量)。
- 计算距离:计算新数据点与所有训练数据点之间的距离(常用欧氏距离)。
- 选择最近K个邻居:找出距离最小的K个邻居。
- 投票/平均:在分类问题中,选择出现次数最多的类别作为预测;在回归问题中,计算K个邻居的平均值作为预测。
例题:KNN分类
假设有以下数据集,我们希望用KNN来预测一个新的数据点的类别。
特征1 | 特征2 | 类别 |
---|---|---|
1 | 2 | A |
2 | 3 | A |
3 | 3 | B |
6 | 5 | B |
7 | 7 | B |
8 | 8 | A |
现在,假设我们有一个新数据点 (4, 4),我们想知道它属于哪一类,选择K=3。
解决步骤:
-
计算距离:我们使用欧氏距离来计算新数据点与每个数据点的距离。
欧氏距离公式:
d(p,q)=(x1−x2)2+(y1−y2)2d(p, q) = \sqrt{(x_1 - x_2)^2 + (y_1 - y_2)^2}计算每个数据点与 (4, 4) 的距离:
- 距离 (1, 2) = (4−1)2+(4−2)2=9+4=13≈3.61\sqrt{(4-1)^2 + (4-2)^2} = \sqrt{9 + 4} = \sqrt{13} \approx 3.61
- 距离 (2, 3) = (4−2)2+(4−3)2=4+1=5≈2.24\sqrt{(4-2)^2 + (4-3)^2} = \sqrt{4 + 1} = \sqrt{5} \approx 2.24
- 距离 (3, 3) = (4−3)2+(4−3)2=1+1=2≈1.41\sqrt{(4-3)^2 + (4-3)^2} = \sqrt{1 + 1} = \sqrt{2} \approx 1.41
- 距离 (6, 5) = (4−6)2+(4−5)2=4+1=5≈2.24\sqrt{(4-6)^2 + (4-5)^2} = \sqrt{4 + 1} = \sqrt{5} \approx 2.24
- 距离 (7, 7) = (4−7)2+(4−7)2=9+9=18≈4.24\sqrt{(4-7)^2 + (4-7)^2} = \sqrt{9 + 9} = \sqrt{18} \approx 4.24
- 距离 (8, 8) = (4−8)2+(4−8)2=16+16=32≈5.66\sqrt{(4-8)^2 + (4-8)^2} = \sqrt{16 + 16} = \sqrt{32} \approx 5.66
-
选择最近的K个邻居:根据距离排序,选择距离最近的三个点:
- (3, 3)(距离1.41)
- (2, 3)(距离2.24)
- (6, 5)(距离2.24)
-
投票:这三个邻居的类别分别是:
- (3, 3) 属于 B
- (2, 3) 属于 A
- (6, 5) 属于 B
其中,类别 B 出现了 2 次,类别 A 出现了 1 次。
-
预测类别:根据多数投票,新数据点 (4, 4) 的预测类别是 B。
总结
KNN算法非常直观,通过计算距离并选择最邻近的K个数据点进行预测。对于分类问题,它使用投票机制来决定类别;对于回归问题,它通过计算邻居的平均值来进行预测。在实际应用中,K值的选择和距离度量的选择都会影响KNN的表现。