在模式识别领域中,最近邻居法(KNN算法,又译K-近邻算法)是将在特征空间中最接近的训练样本进行分类的方法。
最近邻居法采用向量空间模型来分类,概念为相同类别的案例,彼此的相似度高,而可以借由计算与已知类别案例之相似度,来评估未知类别案例可能的分类。
摘自:维基百科
举个例子,手写数字识别,假设0-9的数字可以用特征向量(a,b,c,...)表示,那么现在有一个数字X,它的特征向量可以表示为(x,y,z,...),那么可以用特征向量之间的距离(欧氏距离)来表示它们的相似度,即d=sqrt( (x-a)^2+(y-b)^2+(z-c)^2+... ),d越小则表示X与哪个数字的的距离越近,即X是该数字的可能性越大! 在这里(a,b,c,...)可以被看作是训练集(有很多个训练集,比如10000个,0-9分别各有1000个),(x,y,z,...)可以被看作是测试集,那么就拿(x,y,z,...)分别和10000个(a,b,c,...)计算相似度(欧氏距离),并记录与每个(a,b,c,...)的相似度(欧氏距离),找出其中最小的d(最大的相似度),就表示(x,y,z,...)就是那个数字。
那K是怎么回事呢???
我们计算出了10000个相似度(欧氏距离),我们找出K个相似度(欧氏距离)最高的d,然后统计K个d对应的数字,哪个数字出现的次数最多,就说(x,y,z,...)是谁;比如,令K=10, 统计出有5个d对应的数字为1,3个对应的数字为2,2个对应的数字为8,那我们就说(x,y,z,...)是1,类似于投票先村长,谁的票数多,谁就是村长。如果令K=1呢?那就是上述的例子了,就是只找一个相似度最高的即可。
优点:精度高、对异常值不敏感、无数据输入假定
缺点:计算复杂度高、空间复杂度高(确实是超高,每判断一个样本就需要遍历整个训练样本(10000次))
适用数据范围:数值型和标称型(就是离散型数据,变量的结果只在有限目标集中取值)