众说周知,电影可以按照题材分类的;而我们的确知道每部电影在风格上的确可能和同题材的电影相近。 那么动作片和爱情片是否存在着明显的差别呢? 例如: 1.打斗次数 2.亲吻次数 使用k-近邻算法构造程序,自动划分电影的题材类型。
k-近邻(kNN,k-NearestNeighbor)算法的工作原理
存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。
输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本中特征最相似数据(最近邻)的分类
标签。一般来说,我们只选择样本数据集中前k个最相似的数据,这就是k-近邻算法中k的来历。通常k是一个不大于20的整数。
最后,选择k个最相似数据中出现次数最多的分类,作为新数据的分类。
k-近邻算法的特点
优点:精度高、对异常值不敏感、无数据输入假定
缺点:计算复杂度高、空间复杂度高
适用数据范围:数值型和标称型
k-近邻算法的一般流程
收集数据:任何方法
准备数据:距离计算所需要的数值,最好是结构化的数据格式
分析数据:任何方法
训练算法:此步骤不适用于k-近邻算法
测试算法:计算错误率
使用算法:输入样本数据和结构化的输出结果,然后运行k-近邻算法判断输入数据分类属于哪个分类,最后对计算出的分类执行后续处理
kNN算法伪代码
对未知类别属性的数据集中的每个点一次执行一下操作:
(1)计算已知类别数据集中的点与当前点之间的距离
(2)按照距离递增次序排序
(3)选取与当前点距离最小的k个点
(4)确定前k个点所在类别的出现频率
(5)返回前k个点出现频率最高的类别作为当前点的预测分类
示例:在约会网站上使用k-近邻算法
收集数据:提供文本文件
准备数据:使用Python解析文本文件
分析数据:使用Mapplotlib画二维扩散图
训练算法:此步骤不适用于k-近邻算法
测试算法:使用海伦提供的部分数据作为测试样本。
测试样本和非测试样本的区别在于:
测试样本是意境完成分类的数据,如果预测分类与实际类别不同,则标记为一个错误。
使用算法:产生简单的命令行程序,然后海伦可以输入一些特征数据以判断对方是否为自己喜欢的类型。
import matplotlib
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(datingDataMat[:, 1], datingDataMat[:, 2])
plt.show()
样本3和样本4的距离: