1、原理
有监督分类算法,核心思想是判断一个新的值x的时候,根据它距离最近的K个点是什么类别来判断x属于哪个类别。关键是k的选取以及距离的度量。
2、距离选择
p=1是曼哈顿距离 ,对应于L1范数
p=2是欧氏距离,对应于L2范数
p趋于无穷,是切比雪夫距离
3、k的选择
如果选择较小的K值,就相当于用较小的领域中的训练实例进行预测,“学习”近似误差会减小,只有与输入实例较近或相似的训练实例才会对预测结果起作用,与此同时带来的问题是“学习”的估计误差会增大,换句话说,K值的减小就意味着整体模型变得复杂,容易发生过拟合;
如果选择较大的K值,就相当于用较大领域中的训练实例进行预测,其优点是可以减少学习的估计误差,但缺点是学习的近似误差会增大。这时候,与输入实例较远(不相似的)训练实例也会对预测器作用,使预测发生错误,且K值的增大就意味着整体的模型变得简单,容易发生欠拟合。
K=N,则完全不足取,因为此时无论输入实例是什么,都只是简单的预测它属于在训练实例中最多的类,模型过于简单,忽略了训练实例中大量有用信息。
通常采取交叉验证选取最优值
4、三要素
k值选取,距离度量方式,分类决策的方式(分类用多数表决法,回归用平均法,最近k个样本输出的平均值)
5、流程
(1)计算已知类别数据集中的点与当前点的距离
(2)按距离递增次序排序
(3)选取与当前点距离最小的k个点
(4)统计前k个点所在类别出现的频率
(5)返回前k个点出现频率最高的类别作为当前点的预测类别
6、优缺点
优点:
既可以分类也可以回归
可以用于非线性模型
该算法比较适用于样本容量比较大的类域的自动分类,而那些样本容量比较小的类域采用这种算法比较容易产生误分类情况
训练时间复杂度比支持向量机之类的算法低
和朴素贝叶斯之类的算法比,对数据没有假设,准确度高,对异常点不敏感
由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属的类别,因此对于类域的交叉或重叠较多的待分类样本集来说,KNN方法较其他方法更为适合
缺点:
计算量大,尤其是特征数非常多的时候
样本不平衡的时候,对稀有类别的预测准确率低
相比决策树模型,KNN模型的可解释性不强
以上内容均来源于各个版主、牛客网总结