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

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

如果我们将两个点分别记作(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

机器学习算法之朴素贝叶斯

贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。而朴素贝叶斯分类是贝叶斯分类

频繁项集算法Eclat学习笔记

Equivalence Class Transformation(Eclat)是频繁项挖掘和关联性分析的另外一

关联分析算法FP-Growth学习笔记

在Apriori算法的学习中,我们了解到Apriori算法需要不断生成候选项目队列和不断得扫描整个数据库进行比

发表评论

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