1.5.2 基于距离的分类

常言道“物以类聚,人以群分”,这就是说“分类”是我们日常生活中一项重要工作,比如区分“敌人和朋友”,就是典型的分类。如何分类?机器学习中有一种方法,根据两个样本的数据计算它们之间的距离,距离越小,则代表它们之间的相似度越高,归为一类的概率就越大。据有关资料说明,社会心理学将人际距离分为四种:

● 亲密距离:0~0.5米;

● 个人距离:0.45~1.2米;

● 社会距离:1.2~3.5米;

● 公众距离:3.5~7.5米。

暂不对此研究结果进行评判,这里仅用来说明,借助人与人之间的距离,就可以将人划分为不同的社会关系。在机器学习中,我们也常常用类似的方式,通过距离决定样本的类别。

下面从鸢尾花数据集中选出三个样本,两个样本的species值都是setosa,即同一种花卉,另外一个样本的species值是versicolor。

然后分别计算两个setosa的样本的欧几里得距离和versicolor与其中一个setosa的欧几里得距离。

很显然,不同类别的花卉之间的欧几里得距离不同,就像前面提到的“人际距离”那样,通过上述距离也可以对花进行分类。

为了更直观地观察,选取iris数据集中的两个特征petal_length和petal_width,在平面图中绘制每个样本,如下所示:

输出图像如图1-5-7所示。

图1-5-7

从图1-5-7中可以观察到,同一类别的鸢尾花“聚集”在一起,即彼此之间的“花际距离”比较近。那么,如果我们在每个类别中选一个相对中心的位置,并以此中心画一个圆,如果某样本到“中心”的距离不超过圆的半径,就可以认为该样本属于“中心”所在的类别。机器学习中的k-最近邻算法(k-Nearest Neighbors Algorithm,k-NN算法)就是基于这个设想发展而来的。此处我们不对此算法做完整分析,有兴趣的读者请查阅机器学习算法的有关专门资料。下面仅用sklearn库提供的模型演示这个算法的应用,重点体会其中的距离参数(Sklearn是著名的机器学习库,需要单独安装)。

KNeighborsClassifier是sklearn中用于实现k-NN算法的模型,其中参数metric='minkowski',默认值为字符串'minkowski',表示使用闵可夫斯基距离;另外一个参数默认值p=2,意味着令1.5.1节中介绍的闵可夫斯基距离中的p=2,即具体应用的是欧几里得距离;如果设置p=1则应用曼哈顿距离。

在上面的程序中,已经分别使用曼哈顿距离和欧几里得距离,创建了两个k-NN模型,并用鸢尾花数据集进行了训练。然后分别用这两个模型判断数据为 [2.7,5.2,6.3,0.2] 的样本应该属于哪个类别。

结果显示,对于同一个样本,应用不同距离进行判断,结果不同。这也不用大惊小怪。