k近邻算法(k-NN)怎么选k

  统计/机器学习 监督式学习 模型验证    浏览次数:8280        分享
6

我是用k-NN做二元分类,我也大概知道k-NN的工作原理,问题是这个k是怎么选出来的呢?

 

ZackLi   2017-03-13 23:36



   2个回答 
20

简单来说,k应该选择一个不大不小的奇数。

k太大了,会出现under-fitting。比如训练集有75个“1”,25个“0”。如果k=51,那无论测试点在哪里都会被预测为“1”。

k太小了,会出现over-fitting。如果k=1,那么测试点的标签就是离它最近的训练点的标签,如果这个训练点本身是个outlier,那这个测试点的预测结果当然就靠谱了。

k是偶数的话,会有打平的现象。比如k=10,如果一个预测点的10个近邻中5个是“1”,5个是“0”,那么它到底是什么呢?选偶数就是给自己添麻烦。

SofaSofa数据科学社区DS面试题库 DS面经

高代兄   2017-03-14 08:07

3

可以对k进行cross validation,候选的k可以是1,3,5,7,9,15,25,45。


SofaSofa数据科学社区DS面试题库 DS面经

Gakki   2017-05-13 14:38

你好,我想问下,1不是会过拟合么,为何还作为候选值 - anxueying   2019-01-02 16:54
不推荐k=1,1会过拟合 - lihaile   2019-01-03 13:16


  相关讨论

logistic回归有哪些指标可以评价模型效果?

利用交叉验证调参后还需要用完整的数据集重新训练吗?

二元分类问题中经常提到的TP,TN,FN,FP都是什么意思?

precision-recall曲线下面积有什么意义?

测试误差小于训练误差,是为什么?

有顺序的多元分类模型应该用评判标准?

多元分类可以用accuracy吗?

F1值会受到不平衡数据的影响吗?

分类中的F1精度、F2精度、F3精度是什么意思?

机器学习中lift的概念是什么?怎么用来评价模型?

  随便看看

pandas报错: 'DataFrame' object has no attribute 'unique'

怎么在jupyter notebook里查看python的版本?

为什么神经网络模型不用交叉验证?

matplotlib画图怎么确保横坐标和纵坐标的单位长度一致?

假设检验中的p值是什么意思?为什么越小越好?