机器学习很简单的入门——KNN近邻算法,这是一个用于将未知事物分类到已经事物分类中的算法。这个算法的原理其实很简单的,就是求两点之间的距离,通过距离大小的判断最为主要依据来判断得出未知事物与k个最相近的已知事物,在通过每个已知事物出现的标签次数,来决策出未知事物的最终分类结果。
再深入理解下knn,其实就是计算两事物的相似性程度,这其实是knn算法的本质——通过相似度来实现分类的功能;既然我们已经知道了knn算法的本质是计算相似性程度,那么我们就可以采用很多种方式来计算两者的相似程度了,比如我前文说的计算两个点之间的距离来计算相似度,就是计算欧式距离;我们还可以计算两个向量之间的余弦值来计算相似度,等等还有很多,具体的请点击链接 相似度计算 。我最熟悉的就是一个欧拉距离,还有就是余弦相似度计算。
knn算法的具体步骤如下
- 人工先进行分类,得出一个标准分类
- 对事物特征进行 one-hot编码,也就是向量化
- 对未知事物进行编码操作
- 计算未知事物与所有已知事物的空间距离
- 对距离从小到大排序,取出前k个距离最小的事物分类
- 计算这k个事物中所有便签的出现次数,标签出现次数最多的,为该未知事物的最终分类
knn算法的python实现
1 | import numpy as np |
其中一些api的解释
np.tile(a, b):a是待处理的对象,b是一个元组;假设有np.tile(1, (3, 2)),表示在行的方向上重复3次,列的方向上重复2次;最后结果如下
argsort():argsort()函数返回的是数组值从小到大的索引值
sorted(iterable, cmp, key, reverse):iterable是一个list对象或者是iterator;cmp是带两个参数的比较函数;key是带一个参数的比较函数;reverse是是否逆序;
operator.itemgetter():是获取对象某个域值的函数,这个不是返回指,而是定义了一个函数
knn算法的实际演示
1 | def createDataSet(): |
输出结果