![机器学习数学基础](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=1738742207-v7hvKgh4aUSCntkJp5Voax34OmuS7R9z-0-9ed9bfb99cb716d7f14dffa32f4e5bea)
然后分别计算两个setosa的样本的欧几里得距离和versicolor与其中一个setosa的欧几里得距离。
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt001_558.jpg?sign=1738742207-cvZDhwvuV5WRiJ5YLiZUjvSYtTSsgqwV-0-b1ea0025ab0e02dc9ca3db97e2a46931)
很显然,不同类别的花卉之间的欧几里得距离不同,就像前面提到的“人际距离”那样,通过上述距离也可以对花进行分类。
为了更直观地观察,选取iris数据集中的两个特征petal_length和petal_width,在平面图中绘制每个样本,如下所示:
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt001_559.jpg?sign=1738742207-vv8PLiALS2BMU5pR2KFDRzqy5L2C4NgR-0-85777d9e3a3028dacb4159609f1dd75c)
输出图像如图1-5-7所示。
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt001_560.jpg?sign=1738742207-BjkdCdlinMVDv3ZHGQPAjzhbGJZM7ial-0-2407ef0ec1c8128d244e1c2fa03a9593)
图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=1738742207-GyJBIAJ2zYdzdpsTMOVOiwKOVTTV1uAf-0-aa10f7c8aaa264bb5dc149d182a6724f)
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=1738742207-q2cHmvpwskCVVwpcckYD0xJqzCNmDo3k-0-33322406593ee8169148797d18778045)
在上面的程序中,已经分别使用曼哈顿距离和欧几里得距离,创建了两个k-NN模型,并用鸢尾花数据集进行了训练。然后分别用这两个模型判断数据为 [2.7,5.2,6.3,0.2] 的样本应该属于哪个类别。
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt001_563.jpg?sign=1738742207-yIlimDpehFpPhkuJXMaGt84nrWLE6B3j-0-cbc3bfc9a794a3b52e8ab9b6a0dddd0f)
结果显示,对于同一个样本,应用不同距离进行判断,结果不同。这也不用大惊小怪。