K-Nearest Neighbour
一、主要目的
在样本空间中,找到与待估计的样本最临近的K个邻居,用这几个邻居的类别来估计待测样本的类别
二、适用性
样本容量比较大的类域的自动分类,而样本容量较小的类域则容易误分。尤其适用于样本分类边界不规则的情况
三、不足
1、当样本不平衡时,比如一个类的样本容量很大,其他类的样本容量很小,输入一个样本的时候,K个临近值中大多数都是大样本容量的那个类,这时可能就会导致分类错误。改进方法是对K临近点进行加权,也就是距离近的点的权值大,距离远的点权值小。
2、计算量较大,每个待分类的样本都要计算它到全部点的距离,根据距离排序才能求得K个临近点,改进方法是:先对已知样本点进行剪辑,事先去除对分类作用不大的样本。
四、算法步骤:
1)、计算已知类别数据集合汇总的点与当前点的距离
2)、按照距离递增次序排序
3)、选取与当前点距离最近的K个点
4)、确定距离最近的前K个点所在类别的出现频率
5)、返回距离最近的前K个点中频率最高的类别作为当前点的预测分类
五、matlab 代码实现
注意:不同的K取值,会影响分类的准确率。
六、数据归一化
newData = (oldData-minValue)/(maxValue-minValue)
七、python 代码实现
from
numpy
import
*
import
operator
def
createDataSet():
group
=
array([[
1.0
,
1.1
],[
1.0
,
1.0
],[
0
,
0
],[
0
,
0.1
]])