在KNN (K最近邻)
分类器中,如果选择了偶数的K值,那么在多数投票规则或欧几里得距离规则下,预测结果会是什么。例如,如果有3个类别,分别是
- Iris-setosa
- Iris-versicolor
- Iris-virginica
假设我们设置n_neighbors = 6
。在多数投票规则下,有相当大的几率出现平局结果?在大多数可视化中,这种区域通常用白色表示,表示无法做出决策。但是,在出现平局时,实际的预测结果会是什么?这个问题很难模拟,并且相当抽象,因此可能不容易模拟出来。
另外,设置n_neighbors
为奇数是否能解决或减少这个问题?你认为与简单的多数投票相比,使用欧几里得/曼哈顿距离是否能更好地处理这个问题。然而,scikit-learn文档对此完全没有提及。
回答:
经过一番研究,我找到了一些很好的答案。首先,像@anasvaf这样的用户提到,你应该只在二元分类中使用奇数,这是完全错误的。首先,当我们使用多数投票进行二元分类时,如果出现平局,具体的操作完全依赖于所使用的库。例如,在scikit-learn中,它会选择变量的众数。这意味着,如果在训练数据集中,类别1的数据点数量更多,那么在平局时会选择1。但有一个更好的解决方案。
我们可以使用加权KNN来代替普通的KNN。在加权KNN中,如果出现平局,我们可以计算标记为1的数据点与k个点的总距离,以及标记为0的数据点与k个点的总距离。如果标记为1的总距离更大,那么类别将是0,反之亦然。
还有其他一些好的技术可以处理KNN中的平局问题,但说实话,KNN并不是一个好的学习算法,特别是由于它在大数据集上的时空复杂度问题。