相似度计算之欧几里得距离

在数学中,欧几里得距离或欧几里得度量是欧几里得空间中两点间“普通”(即直线)距离。欧几里得距离有时候有称欧氏距离,在数据分析及挖掘中经常会被使用到,例如聚类或计算相似度。

如果我们将两个点分别记作(p1,p2,p3,p4…)和(q1,q2,q3,14,…),则欧几里得距离的计算公式为:

$E(p,q) = \sqrt{(p_1-q_1)^2+(p_2-q_2)^2+…+(p_n-q_n)^2}=\sqrt{\sum_{i=1}^{n}{(p_i-q_i)^2}}$

Python实现:

可以看到,欧几里得距离得到的结果是一个非负数,最大值是正无穷大,但是通常情况下相似度结果的取值范围在 [-1, 1] 之间。可以对它求倒数将结果转化到 (0, 1]之间。

$$\frac{1}{1+E(p,q)}$$

分母+1是为了避免遇到被0整除的错误。

标准化欧氏距离

标准化欧氏距离是针对简单欧氏距离的缺点(各维度分量的分布不一样)而作的一种改进方案。其实就是将各个分量都标准化。假设样本集X的均值(mean)为m,标准差(standard deviation)为s,那么X的“标准化变量”表示为:

$$X^*=\frac{X-m}{s}$$

即标准化后的值 = ( 标准化前的值-分量的均值) /分量的标准差

经过简单的推导就可以得到两个n维向量a(a1,a2,…,an)与 b(b1,b2,…,bn)间的标准化欧氏距离的公式:

$$d(a,b) = \sqrt{\sum_{k=1}^{n}{(\frac{a_k-b_k}{s_k})^2}}$$

如果将方差的倒数看成是一个权重,这个公式可以看成是一种加权欧氏距离(Weighted Euclidean distance)。

Python实现:

微信支付标点符 wechat qrcode
支付宝标点符 alipay qrcode

雅虎的时序异常检测框架EGADS

EGADS (Extendible Generic Anomaly Detection System)是Yah

使用sklearn进行异常检测

sklearn提供了一些机器学习方法,可用于奇异(Novelty)点或异常(Outlier)点检测,包括One

时间序列异常检测算法梳理

异常的分类 时间序列的异常检测问题通常表示为相对于某些标准信号或常见信号的离群点。虽然有很多的异常类型,但是我

发表评论

电子邮件地址不会被公开。 必填项已用*标注