从年初开始,笔者开始对机器学习做出初步的了解与学习,初衷是为了解决游戏开发中AI的算法问题,但是由于其数学门槛和我工作方面的原因,进度一直都是断断续续。这里开始重新对机器学习方面的知识做出一些学习后的理解总结,以方便日后的学习。
目前笔者看的书是《机器学习实战》。这是一本用python实现的,以案例为主,比较基础的学习书。代码的思路也主要是来自该书。有兴趣的同学可以去了解下。
什么是KNN邻近算法
邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。-百度百科
这里我们可以大概看得比较明白了。这个算法得功能无非就是用来作分类。既然是用来分类,那么我们的数据首先要可以根据其特征来进行分类。比如,我们要判定一个动物是鸭子,他会嘎嘎叫,有羽毛,并且会像鸭子那样走路,而且有着鸭子的喙,那么我们就可以认定这是一只鸭子而不是一个人。
我们进行分类的方法很简单,根据该动物的特征,羽毛,喙,嘎嘎叫这些特点,都是鸭子所具备的,人虽然可以嘎嘎叫,但是并不具备喙和羽毛的特征,所以根据特征的偏移,我们可以将其与人的特征作出对比之后,然后做出认定,这是一只鸭子。
上述可以看做是一个KNN算法的简单实例。
在机器学习的分类问题中,这个算法也被使用得相当之多。
实现
1 |
|
这段python代码可能有一点难懂,里面引用了很多numpy库中对矩阵操作的方法,我们可以把矩阵当作一个直角坐标系中的二维数组来做处理,其主要的逻辑我都注释了出来。其实就是通过比较已有数据中几个距离最近的点,来对未知的数据作出分类。
我们在运行的时候,将最后一段的注释去掉,就能看到其对这个新的数据类型作出的判断。这里的k就是指的元素距离k个数据最近时候的分类结果。
以上就是KNN临近算法最简单的原理,其应用我们后续再聊。
- 代码来自《机器学习实战》