最邻近规则分类英文名字是:K-Nearest Neighbor,简称为KNN。它是机器学习中比较简单的算法,它是Cover和Hart在1968年提出来的最初原型为临近算法,它最早用于分类,故它属于分类算法中的一种;输入是有基于实例的学习(Instance-based Learning)即它的学习是从输入的一些带有label标签的实例中得来的,它也称为懒惰学习(Lazy Learning)(因为开始时它并不需要建立任何的模型,在实例进行测试归类时才进行分类)。
最邻近规则分类定义:就像它名字所说的一样,在一些样本中根据特征值的相似性把其中特征向量相邻最近的一些样本实例划分为一类,然后再来了一个新样本时根据特征值再和K个聚类的特征值进行比较,在这K个聚类的特征值中属于哪一类的多就属于哪一类。即“近朱者赤近墨者黑”的道理,由你的相似实例的特征向量推断出你的分类。核心思想是:如果一个样本实例在特征空间中的K个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。
举一个例子:在我们看电影时,判别电影是动作片还是浪漫爱情片,其中有一些实例样本,在这些实例样本中统计了两个特征向量:1接吻次数;2:打斗次数。见如下图所示:
其中我们看到在前3个电影中打斗次数为3次、2次、1次;接吻次数为:104次、100次、81次;它被分为浪漫爱情片;在后3个电影中打斗次数为101次、99次、98次;接吻次数为10次、5次、2次;它被分为动作片;故来了第7个样本它的打斗次数为18次,接吻次数为90次,判断它是哪一种类型的电影;我们可以把机器学习中的最邻近规则分类算法应用于这个实例中,其中更为抽象的见下图:
其中把7部电影分为7个样本,抽象简化为7个二维空间中的点:6个训练样本抽象简化为6个二维坐标上的点,1个测试样本抽象简化为1个二维坐标上的点;其中6个训练样本已经分类完毕,画在二维坐标平面上,x轴代表接吻次数,y轴代表打斗次数,其中A、B、C三点代表浪漫爱情片,D、E、F三点代表动作片;G点X轴接吻为90,Y轴打斗为18,然后在二维坐标平面上看G点离A、B、C三点浪漫爱情片近还是离动作片近,即可分出G点为哪一类电影。
这个例子中我们以欧几里得距离来判断距离远近,选择参数K为5;进行判断G点属于哪一类:
其中欧几里得距离定义为:
故用Python实现为: