我目前正在和我的朋友讨论 KNN 如何处理重复项。假设 K = 2,我们有一组一维数据点来说明我的困境
我 = {1, 2, 2, 2, 2, 2, 6}
因此,说数据点 1 的 K=2 最近邻只是 {2, 2} 是否正确?同样,如果我们对数据点 2 进行 2 个最近的邻居,那么同样的推理是 {2, 2} 也不包括它自己?
我目前正在和我的朋友讨论 KNN 如何处理重复项。假设 K = 2,我们有一组一维数据点来说明我的困境
我 = {1, 2, 2, 2, 2, 2, 6}
因此,说数据点 1 的 K=2 最近邻只是 {2, 2} 是否正确?同样,如果我们对数据点 2 进行 2 个最近的邻居,那么同样的推理是 {2, 2} 也不包括它自己?
您的推理是正确的-您应该将重复的点视为单独的。你可以看到这一定是在几个方面的情况:
平均而言,向数据中引入小的随机噪声不应影响分类器。如果您删除了重复项,则不会出现这种情况。
假设您的输入空间只有两个可能的值 - 1 和 2,并且所有点“1”属于正类,而点“2” - 属于负类。如果您在 KNN(2) 算法中删除重复项,您将始终将两个可能的输入值都作为任何点的最近邻,并且必须预测任一类的 50% 概率,这肯定不是一致的分类战略。
需要考虑的额外问题是,当您将不同的 Y 标签分配给具有相同 X 坐标的多个点时,如何处理这种情况。
您可以将所有类混合在一起,并说重复集中每个点的标签由具有该坐标的整个点集中的标签分布表示。或者,您可以简单地从集合中抽取 K 个随机点。
两种策略都应该产生一致的分类器,但是在第二种情况下,您的预测可能不是确定性的。然而,大多数实际实现(例如,包括sklearn.neighbors.KNeighborsClassifier)使用这种更简单、不确定的策略,因为它可能稍微简单一些。