KNN (最近邻分类规则)--最简单的机器学习 分类,回归算法
个人认为机器学习的三个最主要的特性,是 分类,回归,聚类。对于具体的问题,我们通过数据的抽象,运用函数来表示问题,在一定的空间内,用凸优化的思想来迭代,搜索更好的数值。这个过程得益于计算机不断发展的计算能力,实则是统计,概率,数学抽象问题和计算机编程的完美结合,便成为机器学习。
使用KNN算法解决一个现实的分类问题:如何区分 爱情片与 动作片 (不是爱情动作片!《机器学习实战P16》 )
根据每部电影的打斗镜头数,和接吻镜头数来做电影分类
现在已经知道6部电影的打斗,接吻镜头数和电影分类。对于一部未知影片,已知打斗和接吻镜头数,如何得到这部电影的分类?
我们计算电影和电影之间的距离,按照向量坐标距离计算,未知电影和已知电影的距离:
按照距离递增排序,可以找到k个最近的电影,让k=3,即Kevin Longblade,Robo Slayer 3000,Amped 这三部爱情片的距离最近,因此我们判定未知电影为爱情片。这个简单例子是KNN算法的简明阐述。划重点了:
如果一个样本在特征空间中有k个最近邻的特征点(已知分类),而这k个特征点中大多数属于某一个类别,那么这个样本属于那一类的概率最大。
KNN算法的具体实现流程如下:
1.初始化距离为最大值
2.计算未知样本与每个训练样本的距离d(多种距离计算方法)
3.得到目前的k个最近邻的的最大距离dMax
4.重复步骤2,4,需要计算所有未知样本与已知样本的距离(也是KNN的计算复杂缺陷)
5.统计k个最近邻样本中数量最大的所属类别,确定未知样本的分类。
KNN也可以用来做回归,样本的k个最近邻居,可以计算样本与邻居的平均值,或将不同邻居的影响权值赋给该样本,得到新的样本。
KNN的Python代码比较简单,示例一小段KNN代码,红框中的内容是关于距离计算的步骤