![机器学习数学基础](https://wfqqreader-1252317822.image.myqcloud.com/cover/482/43738482/b_43738482.jpg)
1.5.2 基于距离的分类
常言道“物以类聚,人以群分”,这就是说“分类”是我们日常生活中一项重要工作,比如区分“敌人和朋友”,就是典型的分类。如何分类?机器学习中有一种方法,根据两个样本的数据计算它们之间的距离,距离越小,则代表它们之间的相似度越高,归为一类的概率就越大。据有关资料说明,社会心理学将人际距离分为四种:
● 亲密距离:0~0.5米;
● 个人距离:0.45~1.2米;
● 社会距离:1.2~3.5米;
● 公众距离:3.5~7.5米。
暂不对此研究结果进行评判,这里仅用来说明,借助人与人之间的距离,就可以将人划分为不同的社会关系。在机器学习中,我们也常常用类似的方式,通过距离决定样本的类别。
下面从鸢尾花数据集中选出三个样本,两个样本的species值都是setosa,即同一种花卉,另外一个样本的species值是versicolor。
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt001_557.jpg?sign=1739173058-DpLdag0nkEIBLZiTiYwGFdOWYjvzNlXl-0-1d9e1d5d8a8f217a4e14718f3c6202eb)
然后分别计算两个setosa的样本的欧几里得距离和versicolor与其中一个setosa的欧几里得距离。
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt001_558.jpg?sign=1739173058-KX0KW2rShEDUysxbLtojc82pipbLq3U5-0-a9023d0cbb7f1be1e48a5989c16c13d3)
很显然,不同类别的花卉之间的欧几里得距离不同,就像前面提到的“人际距离”那样,通过上述距离也可以对花进行分类。
为了更直观地观察,选取iris数据集中的两个特征petal_length和petal_width,在平面图中绘制每个样本,如下所示:
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt001_559.jpg?sign=1739173058-FaFnEK4n3Kpaqi7X5im5p0tXN2BZBiDg-0-24bea28a0818ccbbfcce73344da40aa0)
输出图像如图1-5-7所示。
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt001_560.jpg?sign=1739173058-G3ZHUfNK8ytLEg7eiVOBoFMtjaIdhFUq-0-21f9496533df7f7d231b9a0f5f321105)
图1-5-7
从图1-5-7中可以观察到,同一类别的鸢尾花“聚集”在一起,即彼此之间的“花际距离”比较近。那么,如果我们在每个类别中选一个相对中心的位置,并以此中心画一个圆,如果某样本到“中心”的距离不超过圆的半径,就可以认为该样本属于“中心”所在的类别。机器学习中的k-最近邻算法(k-Nearest Neighbors Algorithm,k-NN算法)就是基于这个设想发展而来的。此处我们不对此算法做完整分析,有兴趣的读者请查阅机器学习算法的有关专门资料。下面仅用sklearn库提供的模型演示这个算法的应用,重点体会其中的距离参数(Sklearn是著名的机器学习库,需要单独安装)。
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt001_561.jpg?sign=1739173058-v2qgTlgppxd2AjqBABSnGODJ2nHzrIhD-0-fea0c3ddf6c5ddce46aed5e7a61a1979)
KNeighborsClassifier是sklearn中用于实现k-NN算法的模型,其中参数metric='minkowski',默认值为字符串'minkowski',表示使用闵可夫斯基距离;另外一个参数默认值p=2,意味着令1.5.1节中介绍的闵可夫斯基距离中的p=2,即具体应用的是欧几里得距离;如果设置p=1,则应用曼哈顿距离。
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt001_562.jpg?sign=1739173058-6DIoVsrtpJqEh7lGojpO7ejbQrLmoRw9-0-4d2619fba0fbad783473707ce79b1777)
在上面的程序中,已经分别使用曼哈顿距离和欧几里得距离,创建了两个k-NN模型,并用鸢尾花数据集进行了训练。然后分别用这两个模型判断数据为 [2.7,5.2,6.3,0.2] 的样本应该属于哪个类别。
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt001_563.jpg?sign=1739173058-dMUcqvHv6fnK8SuT5Gv8MUZVPrSAFfga-0-bb08ca0c39908ef0fa5420420a77baff)
结果显示,对于同一个样本,应用不同距离进行判断,结果不同。这也不用大惊小怪。