KNN算法

KNN算法又称K近邻算法,KNN算法思想极度简单,应用的数学知识极少,不仅如此KNN算法计算出来的效果非常好。

在模式识别领域中,最近邻居法(KNN算法,又译K-近邻算法)是一种用于分类和回归的非参数统计方法。
在这两种情况下,输入包含特征空间(Feature Space)中的k个最接近的训练样本。

在k-NN分类中,输出是一个分类族群。一个对象的分类是由其邻居的“多数表决”确定的,k个最近邻居(k为正整数,通常较小)中最常见的分类决定了赋予该对象的类别。若k = 1,则该对象的类别直接由最近的一个节点赋予。

在程序中要想求出来特征点之间的距离,我们需要的是计算欧拉距离(Euler distance),欧拉距离的具体含义和计算方法在本文中不再专门阐述,通过欧拉距离计算出拥有n维向量的特征点之间的距离。

以下是python得出X_train中每一个特征点x_train与x之间的距离

dis = sqrt(numpy.sum[((x_train-x)**2)for x_train in X_train]

计算出每一个点与x特征点之间的距离后,就可以对这些点从近到远进行排序,然后取最近的前K个点,查看这些点的特征,我们可以使用pthon进行如下编码:

nearest = numpy.argsort(dis)
top_K_y = [y_train[i] for i in nearest[:k]]

其中,y_train中储存的是每一个特征值的特征
当我们得出前K个最相近特征后,我们可以对这些
特征与其出现的频次进行统计,然后输出频数最多的自定义N个元素,在这里我们只取频数最多的前1个元素,在python中我们可以进行如下编码:

import collections import Counter
votes = Counter(topK_y)
votes.most_common(1)

当然,我们如果想知道这个元素代表的特征是什么,我们可以进行如下编码:

a = votes.most_common(1)[0][0]

因此我们就可以认为x与a为一类特征。