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

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

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

 

ZackLi   2017-03-13 23:36



   2个回答 
15

简单来说,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”,那么它到底是什么呢?选偶数就是给自己添麻烦。

高代兄   2017-03-14 08:07

3

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


Gakki   2017-05-13 14:38



  相关主题

多元分类的混淆矩阵   1回答

什么是混淆矩阵(confusion matrix)   2回答

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

用python求二元分类的混淆矩阵   2回答

如何在保持查全率不变的情况下提高查准率?   1回答

Stratified k-fold cross validation(分层交叉验证)   1回答

回归问题中的stratified cross validation?   2回答

如果我用交叉验证,还是否需要单独分出测试集?   1回答

k-fold cross validation的k怎么选   2回答

交叉验证是如何进行的?   1回答

十折交叉验证   1回答

micro和macro F1 score分别是什么意思?   2回答



回答问题时需要注意什么?

我们谢绝在回答前讲“生动”的故事。

我们谢绝“这么简单,你自己想”、“书上有的,你认真看”这类的回答;如果你认为对方的提问方式或者内容不妥,你可以直接忽略该问题,不用进行任何作答,甚至可以对该问题投反对票。

我们谢绝答非所问。

我们谢绝自己不会、硬要回答。

我们感激每一个用户在编写答案时的努力与付出!