为分类任务实现 KNN 的算法如下:
- 计算从相关测试点到训练数据中所有点的距离(在本例中为欧几里得)。
- 使用 1) 中的计算,根据训练点与相关测试点的距离(最小距离优先),按升序对训练点进行排序。
- 从第 2 部分的列表中取出前 K 个训练点,并在一个列表中收集分配给每个训练点的类。
- 将第 3 部分列表中最常出现的类分配给有问题的测试点)。
在这种情况下,由于我们对欧几里得距离感兴趣,您可以使用公式
d(p,p′)=(x1−x′1)2+(x2−x′2)2+(x3−x′3)2−−−−−−−−−−−−−−−−−−−−−−−−−−−−−√
计算训练点之间的距离p=(x1,x2,x3)和有问题的测试点p′=(x′1,x′2,x′3).
使用欧式距离,对于测试点 (0, 0, 0),K = 1 和 K = 3 的预测是什么?
对于 K=1 的情况,如果我的代数正确地为我服务,那么到测试点距离最小的训练点p′=(0,0,0)是重点p=(−1,0,1)(有距离2–√)。假设我的计算是正确的,这意味着我们应该将点 p 的类,即“Green”类关联到测试点p′. K=3 的情况可以通过相同的方法来处理,但是这次我们需要计算从火车点到 p' 的所有距离,保持距离最小的 3 个火车点,并分配其中最常出现的类别3个火车点。我会把它留给你。
如果这个问题中的贝叶斯决策边界是高度非线性的,那么我们会期望 K 的最佳值是大还是小?为什么?
通过考虑 K=1 的情况可以获得一些直觉。在这种情况下,每个训练点周围都有一个邻域,因此该区域中的任何新测试点都将以与训练点相同的方式进行分类。根据定义,这个邻域是由那些更接近相关训练点的点给出的,而不是它们与任何其他训练点的距离。这些邻域被称为 Voronoi 细胞,它们一起形成了 Voronoi 镶嵌(参见维基百科的一些图片)。K=1 的 KNN 的决策边界由这些 Voronoi 单元的边的集合组成,关键的观察是遍历这些图中的任意边可以让人们近似高度非线性曲线(尝试制作自己的数据集并将其绘制为 voronoi细胞来试试这个)。要回答这个问题,