You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KNN模型实现中自定义取k近邻方法失效原因咨询

你的KNN实现错误原因分析

你的代码逻辑完全偏离了KNN的核心要求,问题出在这两点:

  • 你取的first_k是距离值本身,然后用value_counts().idxmax()统计的是这些距离值的出现次数,找出现最多的距离值——这和KNN需要的「统计k个最近样本的标签次数」完全不是一回事。比如两个不同标签的样本距离相同,你的代码会把这个距离值当成结果返回,而不是对应的标签。
  • 正确的逻辑应该是:先找到k个最近样本的索引,再通过索引拿到这些样本对应的y_train标签,最后统计标签的众数作为预测结果。第二种代码就是这么做的:nsmallest(n=k).index拿到最近k个样本的索引,用这个索引取y_train的标签,再用mode()[0]找出现最多的标签。

举个简单例子:
假设X_train的distance列是[0.1, 0.2, 0.1],对应的y_train是[0, 1, 0],k=2。
你的代码里first_k是[0.1, 0.1],value_counts().idxmax()返回0.1,这显然不是正确的预测标签(正确应该是0)。
而第二种代码会拿到前2个最小距离的索引(0和2),取y_train[0]和y_train[2]得到[0,0],mode返回0,这才是正确结果。

内容的提问来源于stack exchange,提问作者VIVEK SINGH GULIA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 13:00:46