knn算法首先要明确的第一个重点是,k邻近不具有显示的学习过程,它是基于实例的一种学习方法,简单来说就是给定一堆西瓜的数据,然后输入一个新西瓜的数据,找到与这个新西瓜最近的k个西瓜,这k个西瓜如果大多数是属于又甜又好吃的西瓜,那么就把这个西瓜分为又甜又好吃的西瓜这一类的西瓜中。从上述的描述中不难看出,有三个要注意的一个是K值,也就是周围有几个西瓜和新西瓜相邻,如果k太小,那么好处是近似误差会减小,只有特征与这几个西瓜相似的才对预测新西瓜的“甜”“好吃”起作用,但是相同的,会带来一个问题,就是假如在这几个西瓜中不甜的多,那么会带来估计误差,这也就是k值减小使得模型变的复杂,复杂度上升,容易发生过拟合。k太大也就容易理解了。
k-近邻算法步骤
计算已知类别数据集中的点与当前点之间的距离;
按照距离递增次序排序;
选取与当前点距离最小的k个点;
确定前k个点所在类别的出现频率;
返回前k个点所出现频率最高的类别作为当前点的预测分类。
KNN算法小结
KNN算法是很基本的机器学习算法了,它非常容易学习,在维度很高的时候也有很好的分类效率,因此运用也很广泛,这里总结下KNN的优缺点。
KNN的主要优点有:
1) 理论成熟,思想简单,既可以用来做分类也可以用来做回归
2) 可用于非线性分类
3) 训练时间复杂度比支持向量机之类的算法低,仅为O(n)
4) 和朴素贝叶斯之类的算法比,对数据没有假设,准确度高,对异常点不敏感
5) 由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合
6)该算法比较适用于样本容量比较大的类域的自动分类,而那些样本容量较小的类域采用这种算法比较容易产生误分
KNN的主要缺点有:
1)计算量大,尤其是特征数非常多的时候
2)样本不平衡的时候,对稀有类别的预测准确率低
3)KD树,球树之类的模型建立需要大量的内存
4)使用懒散学习方法,基本上不学习,导致预测时速度比起逻辑回归之类的算法慢
5)相比决策树模型,KNN模型可解释性不强
以上就是KNN算法原理的一个总结,希望可以帮到朋友们,尤其是在用scikit-learn学习KNN的朋友们。
参考
[if !supportLists]1. [endif]https://blog.csdn.net/baidu_36881343/article/details/79745387
[if !supportLists]2. [endif]http://cuijiahua.com/blog/2017/11/ml_1_knn.html
[if !supportLists]3. [endif]https://blog.csdn.net/bigkeen/article/details/78430771