1. KNN算法简介
KNN算法是Cover T和Hart P在1967年提出的基本分类和回归方法。它的工作原理是存在一个样本数据集,也称为训练样本集,并且每个数据都有一个标签。在样本集中,也就是说,我们知道样本集中每个数据与其分类之间的对应关系。在输入没有标签的新数据之后,将新数据的每个特征与对应于样本集中的数据的特征进行比较,然后算法提取样本的最相似数据(最近邻居)的分类标签。一般来说,我们只选择样本数据集中前k个最相似的数据,这是k-最近邻算法中k的来源,通常k是不大于20的整数。最后,出现次数最多的类别选择k个最相似的数据作为新数据的分类。如下所示:
这里我们以电影分类为例,粗略了解KNN算法的基本流程。表1给出了电影的一些特征和相关的电影类型分类。
该表显示了七部电影,每部电影有两个属性值和一个类别标签,其中六个有明确的分类标签,最后一个只有属性值而没有分类标签。 KNN算法给出了最后一部电影的分类。表中的六部电影是我们谈到的训练样本集。作者将确定要分类的电影的分类和训练样本集。这种关系是计算未知电影和训练样本集中其他电影之间的距离。在这里,我们根据欧几里德距离公式找到未知胶片和训练集中样本之间的距离,如图所示。


现在获得已知电影和未知电影之间的距离,然后根据距离按升序排序,从而可以获得距离最近的k个电影。当k = 1时,KNN算法也称为K最近邻算法,但通常在选择时不使k = 1,通常选择k = log(N),其中N是训练样本集中的样本数。 Log()是自然对数。我们在这里选择k = 2,所以最接近未知电影的两部电影是他不是真正的男人和美女,这两部电影都恋爱了,所以我们可以判断这部未知电影也是一部浪漫电影。 。这是KNN算法的核心。首先,获得未知样本和训练样本之间的距离。然后,选择具有最近距离的前K个样本,然后确定K个样本中的类别的比例,最后选择具有最高比例的类别作为未知样本的分类。
2. KNN算法Python程序
上面简要介绍了KNN算法,指出了KNN算法的核心逻辑和算法过程。下面我将使用Python程序构建KNN算法。这里有一点,机器学习系列没有详细介绍Python语法,所以不清楚Python的朋友可以参考作者未来的Python系列文章或参考Python基础教程和Python学习手册。
2.1使用Python创建训练数据

这里我们以电影分类中的数据为例来说明如何使用Python创建数据集,因为我们只有六部电影作为训练数据,因此我们只需要创建六条记录。代码如下:
所以我们将六部电影数字化。要验证我们创建的数据是否正常,我们只需要在创建函数后使用以下命令验证我们的数据集是否已成功创建。
如果创建成功,我们将看到以下数据显示:
为了更直观和有趣的观察,我们可以可视化数据并运行以下命令:


2.2实施KNN分类算法
在编写程序之前,一个好的程序不能与合理的计划分开。在这里,我们将再次理清我们需要逐步实施的过程,以实现分类目标。 (请记住,程序是过程,因此在编写程序之前一定要了解任务的处理过程):
计算已知类别数据集中的点与未知点之间的距离;
按距离逐步对数据集进行排序;
选择距离值最小的K点;
确定前K点类别的出现频率;
返回具有最高K点频率的类别作为未知点的预测分类。
程序清单:KNN算法Python程序


函数classfication是作者编写的KNN分类函数。该函数的操作需要四个参数:第一个参数TargetData是要分类的样本向量;第二参数RefDataSet是训练数据集的属性数据;第三个参数标签要训练数据集的分类标签,请记住第三个参数标签和第二个参数RefDataSet具有相同的行数;第四个参数k是最近的邻居数。
下面我们可以使用这个分类函数来预测未知样本。在这里,我们输入未知电影的属性数据,以确定未知电影的分类。我们得到:
这与我们上面得出的结论是一致的,因此它表明我们的分类程序运作良好。到目前为止,我们已经完成了KNN分类算法的设计。