大多数人都喜欢看电影,电影是如何分类呢?为了简化问题,假设所有的电影要么是爱情片,要么是动作片。如果我们已知一些电影的分类结果和电影中打斗镜头及亲吻镜头的次数,如下:
现有一部新电影,打斗镜头及亲吻镜头的次数已知,我们如何来预测这部新电影的类型呢?
我们可以把电影样本的特征值看做是在欧氏空间的坐标(特征值可能需要归一化处理使得各个特征的权重相等),再依次计算未知电影与已知电影的欧氏距离(也可以是其它距离):
我们按照距离从小到大排序,可以找到k个距离最近的电影。假定k=3,则k个已知样本的类型里最多的类型是爱情片,因此我们预测未知电影也是爱情片。以上预测电影分类的算法就是 k -近邻算法(kNN)。
k -近邻算法的基本原理是:存在一个训练数据(每个样本都有特征和分类标签的样本集),输入没有分类标签的新样本后,依次计算新样本和各个训练样本的距离,找出最相似(最近邻)的k个已知样本,提取它们的分类标签。最后,选择这k个分类标签中出现次数最多的分类,做为新样本的分类。
假设训练数据保存在csv文件中(格式见本篇第一张图片去掉最后一行),下面的代码可以读出特征数据和分类标签。
import numpy as npdef get_trainSet(path): data = np.loadtxt(path, delimiter =