【机器学习】常见算法详解第2篇:K近邻算法各种距离度量(已分享,附代码)

本系列文章md笔记(已分享)主要讨论机器学习算法相关知识。机器学习算法文章笔记以算法、案例为驱动的学习,伴随浅显易懂的数学知识,让大家掌握机器学习常见算法原理,应用Scikit-learn实现机器学习算法的应用,结合场景解决实际问题。包括K-近邻算法,线性回归,逻辑回归,决策树算法,集成学习,聚类算法。K-近邻算法的距离公式,应用LinearRegression或SGDRegressor实现回归预测,应用LogisticRegression实现逻辑回归预测,应用DecisionTreeClassifier实现决策树分类,应用RandomForestClassifie实现随机森林算法,应用Kmeans实现聚类任务。

全套笔记和代码自取地址: https://gitee.com/yinuo112/Technology/tree/master/机器学习/机器学习(算法篇)/1.md

感兴趣的小伙伴可以自取哦,欢迎大家点赞转发~


共 7 章,44 子模块,总字数:52595


K-近邻算法

学习目标

  • 掌握K-近邻算法实现过程
  • 知道K-近邻算法的距离公式
  • 知道K-近邻算法的超参数K值以及取值问题
  • 知道kd树实现搜索的过程
  • 应用KNeighborsClassifier实现分类
  • 知道K-近邻算法的优缺点
  • 知道交叉验证实现过程
  • 知道超参数搜索过程
  • 应用GridSearchCV实现算法参数的调优

1.3 距离度量

1 欧式距离**(Euclidean Distance):**

欧氏距离是最容易直观理解的距离度量方法,我们小学、初中和高中接触到的两个点在空间中的距离一般都是指欧氏距离。

举例:

python 复制代码
X=[[1,1],[2,2],[3,3],[4,4]];
经计算得:
d = 1.4142    2.8284    4.2426    1.4142    2.8284    1.4142

2 曼哈顿距离(Manhattan Distance):

在曼哈顿街区要从一个十字路口开车到另一个十字路口,驾驶距离显然不是两点间的直线距离。这个实际驾驶距离就是"曼哈顿距离"。曼哈顿距离也称为"城市街区距离"(City Block distance)。

举例:

python 复制代码
X=[[1,1],[2,2],[3,3],[4,4]];
经计算得:
d =   2     4     6     2     4     2

3 切比雪夫距离 (Chebyshev Distance):

国际象棋中,国王可以直行、横行、斜行,所以国王走一步可以移动到相邻8个方格中的任意一个。国王从格子(x1,y1)走到格子(x2,y2)最少需要多少步?这个距离就叫切比雪夫距离。

举例:

python 复制代码
X=[[1,1],[2,2],[3,3],[4,4]];
经计算得:
d =   1     2     3     1     2     1

4 闵可夫斯基距离(Minkowski Distance):

闵氏距离不是一种距离,而是一组距离的定义,是对多个距离度量公式的概括性的表述。

两个n维变量a(x11,x12,...,x1n)与b(x21,x22,...,x2n)间的闵可夫斯基距离定义为:

其中p是一个变参数:

当p=1时,就是曼哈顿距离;

当p=2时,就是欧氏距离;

当p→∞时,就是切比雪夫距离。

根据p的不同,闵氏距离可以表示某一类/种的距离。

小结:

1 闵氏距离,包括曼哈顿距离、欧氏距离和切比雪夫距离都存在明显的缺点:

e.g. 二维样本(身高[单位:cm],体重[单位:kg]),现有三个样本:a(180,50),b(190,50),c(180,60)。

a与b的闵氏距离(无论是曼哈顿距离、欧氏距离或切比雪夫距离)等于a与c的闵氏距离。但实际上身高的10cm并不能和体重的10kg划等号。

2 闵氏距离的缺点:

(1)将各个分量的量纲(scale),也就是"单位"相同的看待了;

(2)未考虑各个分量的分布(期望,方差等)可能是不同的。


5 标准化欧氏距离 (Standardized EuclideanDistance):

标准化欧氏距离是针对欧氏距离的缺点而作的一种改进。

思路:既然数据各维分量的分布不一样,那先将各个分量都"标准化"到均值、方差相等。假设样本集X的均值(mean)为m,标准差(standard deviation)为s,X的"标准化变量"表示为:

如果将方差的倒数看成一个权重,也可称之为加权欧氏距离(Weighted Euclidean distance)。

举例:

python 复制代码
X=[[1,1],[2,2],[3,3],[4,4]];(假设两个分量的标准差分别为0.5和1)
经计算得:
d =   2.2361    4.4721    6.7082    2.2361    4.4721    2.2361

6 余弦距离(Cosine Distance)

几何中,夹角余弦可用来衡量两个向量方向的差异;机器学习中,借用这一概念来衡量样本向量之间的差异。

  • 二维空间中向量A(x1,y1)与向量B(x2,y2)的夹角余弦公式:
  • 两个n维样本点a(x11,x12,...,x1n)和b(x21,x22,...,x2n)的夹角余弦为:

即:

夹角余弦取值范围为[-1,1]。余弦越大表示两个向量的夹角越小,余弦越小表示两向量的夹角越大。当两个向量的方向重合时余弦取最大值1,当两个向量的方向完全相反余弦取最小值-1。

举例:

python 复制代码
X=[[1,1],[1,2],[2,5],[1,-4]]
经计算得:
d =   0.9487    0.9191   -0.5145    0.9965   -0.7593   -0.8107

7 汉明距离(Hamming Distance)【了解】:

两个等长字符串s1与s2的汉明距离为:将其中一个变为另外一个所需要作的最小字符替换次数。

例如:

python 复制代码
The Hamming distance between "1011101" and "1001001" is 2. 
  The Hamming distance between "2143896" and "2233796" is 3. 
  The Hamming distance between "toned" and "roses" is 3.
python 复制代码
随堂练习:
求下列字符串的汉明距离:

  1011101与 1001001  

  2143896与 2233796 
 
  irie与 rise

汉明重量:是字符串相对于同样长度的零字符串的汉明距离,也就是说,它是字符串中非零的元素个数:对于二进制字符串来说,就是 1 的个数,所以 11101 的汉明重量是 4。因此,如果向量空间中的元素a和b之间的汉明距离等于它们汉明重量的差a-b。

应用:汉明重量分析在包括信息论、编码理论、密码学等领域都有应用。比如在信息编码过程中,为了增强容错性,应使得编码间的最小汉明距离尽可能大。但是,如果要比较两个不同长度的字符串,不仅要进行替换,而且要进行插入与删除的运算,在这种场合下,通常使用更加复杂的编辑距离等算法。

举例:

python 复制代码
X=[[0,1,1],[1,1,2],[1,5,2]]
注:以下计算方式中,把2个向量之间的汉明距离定义为2个向量不同的分量所占的百分比。

经计算得:
d =   0.6667    1.0000    0.3333

8 杰卡德距离(Jaccard Distance)【了解】:

杰卡德相似系数(Jaccard similarity coefficient):两个集合A和B的交集元素在A,B的并集中所占的比例,称为两个集合的杰卡德相似系数,用符号J(A,B)表示:

杰卡德距离(Jaccard Distance):与杰卡德相似系数相反,用两个集合中不同元素占所有元素的比例来衡量两个集合的区分度:

举例:

python 复制代码
X=[[1,1,0][1,-1,0],[-1,1,0]]
注:以下计算中,把杰卡德距离定义为不同的维度的个数占"非全零维度"的比例
经计算得:
d =   0.5000    0.5000    1.0000

9 马氏距离(Mahalanobis Distance)【了解】

下图有两个正态分布图,它们的均值分别为a和b,但方差不一样,则图中的A点离哪个总体更近?或者说A有更大的概率属于谁?显然,A离左边的更近,A属于左边总体的概率更大,尽管A与a的欧式距离远一些。这就是马氏距离的直观解释。

马氏距离是基于样本分布的一种距离。

马氏距离是由印度统计学家马哈拉诺比斯提出的,表示数据的协方差距离。它是一种有效的计算两个位置样本集的相似度的方法。

与欧式距离不同的是,它考虑到各种特性之间的联系,即独立于测量尺度。

**马氏距离定义:**设总体G为m维总体(考察m个指标),均值向量为μ=(μ~1~,μ~2~,... ...,μ~m~,)^`^,协方差阵为∑=(σ~ij~),

则样本X=(X~1~,X~2~,... ...,X~m~,)^`^与总体G的马氏距离定义为:

马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为∑的随机变量的差异程度:如果协方差矩阵为单位矩阵,马氏距离就简化为欧式距离;如果协方差矩阵为对角矩阵,则其也可称为正规化的欧式距离。

马氏距离特性:

1.量纲无关,排除变量之间的相关性的干扰;

2.马氏距离的计算是建立在总体样本的基础上的,如果拿同样的两个样本,放入两个不同的总体中,最后计算得出的两个样本间的马氏距离通常是不相同的,除非这两个总体的协方差矩阵碰巧相同;

3 .计算马氏距离过程中,要求总体样本数大于样本的维数,否则得到的总体样本协方差矩阵逆矩阵不存在,这种情况下,用欧式距离计算即可。

4.还有一种情况,满足了条件总体样本数大于样本的维数,但是协方差矩阵的逆矩阵仍然不存在,比如三个样本点(3,4),(5,6),(7,8),这种情况是因为这三个样本在其所处的二维空间平面内共线。这种情况下,也采用欧式距离计算。

欧式距离&马氏距离:

举例:

已知有两个类G~1~和G~2~,比如G~1~是设备A生产的产品,G~2~是设备B生产的同类产品。设备A的产品质量高(如考察指标为耐磨度X),其平均耐磨度μ~1~=80,反映设备精度的方差σ^2^(1)=0.25;设备B的产品质量稍差,其平均耐磨损度μ~2~=75,反映设备精度的方差σ^2^(2)=4.

今有一产品G~0~,测的耐磨损度X~0~=78,试判断该产品是哪一台设备生产的?

直观地看,X~0~与μ~1~(设备A)的绝对距离近些,按距离最近的原则,是否应把该产品判断设备A生产的?

考虑一种相对于分散性的距离,记X~0~与G~1~,G~2~的相对距离为d~1~,d~2~,则:

因为d~2~=1.5 < d~1~=4,按这种距离准则,应判断X~0~为设备B生产的。

设备B生产的产品质量较分散,出现X~0~为78的可能性较大;而设备A生产的产品质量较集中,出现X~0~为78的可能性较小。

这种相对于分散性的距离判断就是马氏距离。

未完待续, 同学们请等待下一期

相关推荐
九圣残炎9 分钟前
【从零开始的LeetCode-算法】1456. 定长子串中元音的最大数目
java·算法·leetcode
lulu_gh_yu14 分钟前
数据结构之排序补充
c语言·开发语言·数据结构·c++·学习·算法·排序算法
丫头,冲鸭!!!34 分钟前
B树(B-Tree)和B+树(B+ Tree)
笔记·算法
Re.不晚38 分钟前
Java入门15——抽象类
java·开发语言·学习·算法·intellij-idea
艾派森1 小时前
大数据分析案例-基于随机森林算法的智能手机价格预测模型
人工智能·python·随机森林·机器学习·数据挖掘
为什么这亚子2 小时前
九、Go语言快速入门之map
运维·开发语言·后端·算法·云原生·golang·云计算
2 小时前
开源竞争-数据驱动成长-11/05-大专生的思考
人工智能·笔记·学习·算法·机器学习
~yY…s<#>2 小时前
【刷题17】最小栈、栈的压入弹出、逆波兰表达式
c语言·数据结构·c++·算法·leetcode
忘梓.2 小时前
划界与分类的艺术:支持向量机(SVM)的深度解析
机器学习·支持向量机·分类
Chef_Chen2 小时前
从0开始机器学习--Day17--神经网络反向传播作业
python·神经网络·机器学习