机器学习领域 几种距离度量方法【3】
十三、堪培拉距离 (Canberra Distance)
十四、布雷柯蒂斯距离(Bray Curtis Distance)
十五、交叉熵(Cross Entropy)
十六、相对熵(relative entropy)
十七、js散度(Jensen-Shannon)
十八、测地距离(Geodesic distance)
堪培拉距离 (Canberra Distance)
被认为是曼哈顿距离的加权版本。
其定义公式为:
通常堪培拉距离对于接近于0(大于等于0)的值的变化非常敏感。与马氏距离一样,堪培拉距离对数据的量纲不敏感。不过堪培拉距离假定变量之间相互独立,没有考虑变量之间的相关性。
代码实现:
import numpy as np
p = np.array([11, 0, 7, 8, 0])
q = np.array([24, 37, 5, 18, 1])
n = len(p)
distance = 0
for i in range(n):if p[i] == 0 and q[i] == 0:distance += 0else:distance += abs(p[i] - q[i]) / (abs(p[i]) + abs(q[i]))
print(distance)
布雷柯蒂斯距离(Bray Curtis Distance)
Bray Curtis距离主要用于生态学和环境科学,计算坐标之间的距离。该距离取值在[0,1]之间。它也可以用来计算样本之间的差异。
样本数据:
计算:
代码实现:
import numpy as np
from scipy.spatial.distance import pdistx = np.array([11, 0, 7, 8, 0])
y = np.array([24, 37, 5, 18, 1])# 方法一:根据公式求解
up = np.sum(np.abs(y - x))
down = np.sum(x) + np.sum(y)
d1 = (up / down)# 方法二:根据scipy库求解
X = np.vstack([x, y])
d2 = pdist(X, 'braycurtis')
通常,一个信源发送出什么符号是不确定的,衡量它的不确定性可以根据其出现的概率来度量。概率大,出现机会多,不确定性小;反之就大。
不确定性函数f必须满足两个条件:
1)是概率P的单调递减函数;
2)两个独立符号所产生的不确定性应等于各自不确定性之和,即f(P1,P2)=f(P1)+f(P2),这称为可加性。
同时满足这两个条件的函数f是对数函数,即
在信源中,考虑的不是某一单个符号发生的不确定性,而是要考虑这个信源所有可能发生情况的平均不确定性。若信源符号有n种取值:U1…Ui…Un,对应概率为:P1…Pi…Pn,且各种符号的出现彼此独立。这时,信源的平均不确定性应当为单个符号不确定性-logPi的统计平均值(E),可称为信息熵,即
假设现在有一个样本集中两个概率分布p,q,其中p为真实分布,q为非真实分布。假如,按照真实分布p来衡量识别一个样本所需要的编码长度的期望为:
但是,如果采用错误的分布q来表示来自真实分布p的平均编码长度,则应该是:
我们称H(p)为信息熵,称H(p,q)为交叉熵。
交叉熵在CNN分类中经常用到,用来作为预测值和真实标签值的距离度量。经过卷积操作后,最后一层出来的特征经过softmax函数后会变成一个概率向量,我们可以看作为是概率分布q, 而真实标签我们可以看作是概率分布p, 因此真实分布p和预测分布q的交叉熵就是我们要求的loss损失值,即
代码实现:
import numpy as np
import tensorflow as tffea = np.array([6.5, 4.2, 7.4, 3.5], np.float32)
label = np.array([1, 0, 0, 0])# 方法一:根据公式求解
def softmax(x):return np.exp(x) / np.sum(np.exp(x), axis=0)loss1 = -np.sum(label * np.log(softmax(fea)))# 方法二:调用tensorflow深度学习框架求解
sess = tf.Session()
logits = tf.Variable(fea)
labels = tf.Variable(label)
sess.run(tf.global_variables_initializer())
loss2 = sess.run(tf.losses.softmax_cross_entropy(labels, logits))
sess.close()
相对熵(relative entropy)
又称为KL散度(Kullback–Leibler divergence,简称KLD),信息散度(information divergence),信息增益(information gain)。
相对熵是交叉熵与信息熵的差值。即相对熵=交叉熵-信息熵 KL(p||q)=H(p,q)-H(p
表示用分布q模拟真实分布p相比用p模拟p,所需的额外信息。
相对熵(KL散度)有两个主要的性质。如下
(1)尽管 KL 散度从直观上是个度量或距离函数,但它并不是一个真正的度量或者距离,因为它不具有对称性,即
(2)相对熵具有非负性
总结一下:
信息熵公式:
交叉熵公式:
相对熵公式:
三者的关系:
使用场景:文本的相似度、推荐系统、用户画像…
代码实现:
import numpy as np
import scipy.statsp = np.asarray([0.65, 0.25, 0.07, 0.03])
q = np.array([0.6, 0.25, 0.1, 0.05])# 方法一:根据公式求解
kl1 = np.sum(p * np.log(p / q))# 方法二:调用scipy包求解
kl2 = scipy.stats.entropy(p, q)
js散度(Jensen-Shannon)
因为kl散度不具对称性,因此js散度在kl散度的基础上进行了改进,可以用于衡量两种不同分布之间的差异。
现有两个分布p1和p2,其JS散度公式为:
代码实现:
import numpy as np
import scipy.statsp = np.asarray([0.65, 0.25, 0.07, 0.03])
q = np.array([0.6, 0.25, 0.1, 0.05])M = (p + q) / 2# 方法一:根据公式求解
js1 = 0.5 * np.sum(p * np.log(p / M)) + 0.5 * np.sum(q * np.log(q / M))# 方法二:调用scipy包求解
js2 = 0.5 * scipy.stats.entropy(p, M) + 0.5 * scipy.stats.entropy(q, M)
测地距离(Geodesic distance)
测地线: 流形上连接两个点的最短曲线
例如:球面上的测地线就是球面上的大圆弧
测地距离:测地线的长度
机器学习领域 几种距离度量方法【3】相关推荐
- 【机器学习基础】常见的9种距离度量方法,内含欧氏距离、切比雪夫距离等
作者|机器之心编译 来源|机器之心 在数据挖掘中,我们经常需要计算样本之间的相似度,通常的做法是计算样本之间的距离.在本文中,数据科学家 Maarten Grootendorst 向我们介绍了 9 种 ...
- 数据科学中常见的9种距离度量方法
选自towardsdatascience 作者:Maarten Grootendorst 机器之心编译 编辑:陈萍 在数据挖掘中,我们经常需要计算样本之间的相似度,通常的做法是计算样本之间的距离.在本 ...
- 数据科学中常见的9种距离度量方法(包括曼哈顿距离、欧氏距离、半正矢距离等)
数据科学中常见的9种距离度量方法(包括曼哈顿距离.欧氏距离.半正矢距离等) 1.欧氏距离(Euclidean Distance) 2.余弦相似度(Cosine Similarity) 3.汉明距离(H ...
- 10个机器学习中常用的距离度量方法
转载:Deephub Imba 距离度量是有监督和无监督学习算法的基础,包括k近邻.支持向量机和k均值聚类等. 距离度量的选择影响我们的机器学习结果,因此考虑哪种度量最适合这个问题是很重要的.因此,我 ...
- 机器学习案例系列教程——距离度量方法总结
在数据挖掘中,无论是对数据进行分类.聚类还是异常检测.关联性分析,都建立在数据之间相似性或相异性的度量基础上.通常使用距离作为数据之间相似性或相异性的度量方法,常用的度量方法有欧式距离.曼哈顿距离 ...
- 数据科学中常见的9种距离度量方法,包括欧氏距离、切比雪夫距离、半正矢距离等
1.欧氏距离(Euclidean Distance) 欧式距离可解释为连接两个点的线段的长度.欧式距离公式非常简单,使用勾股定理从这些点的笛卡尔坐标计算距离. 代码实现: import numpy a ...
- 数据挖掘中的12种距离度量原理及实现代码
本文介绍了12种常用的距离度量原理.优缺点.应用场景,以及基于Numpy和Scipy的Python实现代码. 笔记工具:Notability 文章目录 1. 个人笔记 2. 代码实现 1)闵可夫斯基距 ...
- 常见距离度量方法优缺点对比!
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 译者:张峰,安徽工业大学,Datawhale成员 许多算法,不管是有监督 ...
- 机器学习常用的距离度量方法
机器学习领域常常会遇到求解相似度的问题,通常可以转化为对距离的求解,最常用的是对"向量"的距离求解.比如,求解某物品A和某物品B之间的相似度,可以收集它们共有特征,构建特征向量a和 ...
最新文章
- ios 沙盒 plist 数据的读取和存储
- thinkphp学习笔记10—看不懂的路由规则
- Source Insight 常用设置和快捷键大全
- 征集对Oracle的问题
- Windows11右下角出现评估副本水印如何去除?
- 忘记mysql数据库名称_忘记MySQL数据库密码的解决办法
- tqdm使用(Python进度条)
- python中冒号报错_python中一些常见的错误_后端开发
- c语言结构体实验张三丰,如何成为公务员考试结构化面试里的张三丰
- 盛科交换机配置命令_cisco2960交换机 清除配置的命令
- paip.模块间同步登录SSO实现总结
- 计算机考试考什么二级,计算机国家二级考试会考什么内容?怎么考?
- 微信小程序 13 排行榜的编写
- 做H5页面用什么软件比较好?3款易上手好用的H5网页编辑工具
- C#_CRC-16/CCITT-FALSE计算加判断
- SEED LABS初入
- 24点计算器c语言源代码,萌新求助!!24点游戏计算器
- 第十届ACM山东省赛总结
- 177本名著浓缩成了177句话
- 树的基本概念和遍历规则 数据结构和算法 二叉树遍历(前序、中序、后序、层次、深度优先、广度优先遍历)