KNN在K值为偶数且出现平局时的预测类别会是什么?

KNN (K最近邻)分类器中,如果选择了偶数的K值,那么在多数投票规则或欧几里得距离规则下,预测结果会是什么。例如,如果有3个类别,分别是

  1. Iris-setosa
  2. Iris-versicolor
  3. 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并不是一个好的学习算法,特别是由于它在大数据集上的时空复杂度问题。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注