KNN算法又称K邻近算法,属于监督学习。
其中心思想是找到未分类样本附近K个最相近的已分类样本,该样本的分类由附近已分类的样本投票决定。
可通过欧氏距离、曼哈顿距离等计算测试样本与已分类样本之间的距离。
K值的选择会直接影响归类效果。
k太小,分类结果易受噪声点影响;
k太大,近邻中又可能包含太多的其它类别的点。(对距离加权,可以降低k值设定的影响)k值通常是采用交叉检验来确定(以k=1为基准)
经验规则:k一般低于训练样本数的平方根。
算法步骤
1.选择距离公式。
2.计算为分类样本点与其他所有已分类样本之间的距离。
3.针对计算出的距离进行升序排序。
4.选择前K各个距离最短的点。
5.前K个距离最短的点中,未分类的样本点所属分类,由附近已分类的样本投票决定。
缺陷与改进
缺陷一:计算为分类点与所有已分类的点距离,再进行排序,导致计算量大。
改进:使用K-d树数据结构,优化搜索操作,减少计算量。
缺陷二:样本不平衡问题会影响分类结果。
改进:采用权值的方法(距离的倒数)
K-d树数据结构
对数据点在k维空间划分的一种数据结构。
中心思想:K-d树是一种空间划分树,把整个空间划分为特定的几个部分,然后在特定空间的部分内进行相关搜索操作。
K-d树构建