今天学习的是机器学习中最为简单的一个算法:K近邻算法,简称KNN。由于学习主要参照《机器学习实战》这本书进行,本系列文章中涉及到的概念与实例绝大部分来源于此。本文主要从KNN算法概述,使用K-近邻算法改进约会网网站的配对效果,手写识别函数三个方面来展开,本文的主要用意在于阐释《机器学习实战》中源代码的涉及到的函数,以及通过实践将本书中涉及到的只能在python2中运行的源代码转为在python3下能够成功运行的代码。
关键词: 数据可视化 数据归一化 python3
环境: Anaconda
Python3.6
一、KNN算法概述
1.1 工作原理
存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。一般来说,我们只选择样本数据集中前K个最相似的数据,选择这K个数据中出现次数最多的分类,作为新数据的分类。
1.2 python导入数据
为了简单演示K近邻算法的实现过程,在这一部分导入了一个最简单的数据样本集。新建一个py文件命名为kNN.py(注意k为小写),在该文件下写入下述代码,保存该文件至python的工作路径。
1 from numpy import *
2 import operator
3 def createDataSet():
4 group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
5 labels = ['A','A','B','B']
6 return group, labels
array函数只有在import numpy 的条件下才能使用,需要注意其与默认数据类型list的区别。至此,我们已经完成了createDateSet()函数的编写,在python开发环境中,我们只需要输入下述命令行即可完成数据的导入。
1 >>>import kNN
2 >>>group,labels = kNN.createDataSet()
1.3 kNN分类器的实现
完成了数据导入工作后,接下来需要考虑的就是如何用代码实现分类器了。首先给出分类器实现的一般步骤:
- 计算已知类别数据集中的点与当前点的距离;
- 按照距离递增次序排序;
- 选取与当前点距离最小的k个点;
- 确定前k个点所在类别的出现频率;
- 返回前k个点出现概率最高的类别作为当前点的预测分类。