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

在计算用户相似度的过程中,欧几里得距离是比较直观,常见的一种相似度算法。

根据两用户之间共同评价的Item为维度,建立一个多维的空间,那么通过用户对单一维度上的评价Score组成的坐标系Xs1,s2,s3……si)即可定位该用户在这个多维度空间中的位置,那么任意两个位置之间的距离Distance(X,Y)(即:欧式距离)就能在一定程度上反应了两用户兴趣的相似程度。


上图即二维空间中6位用户对Snakes 和 Dupree 这两Item评价的直观体现

 

就其意义而言,欧氏距离越小,两个用户相似度就越大,欧氏距离越大,两个用户相似度就越小。

 

在日常使用中,一般习惯于将相似度与1类比,相似度在数值上反映为0<=Similarity(X,y)<=1,越接近1,相似度越高;

那么我们在使用欧几里得距离时,可以通过 1/1+Distance(X,Y)来贯彻上一理念。

 

1.定义

    欧几里得度量(euclidean metric)(也称欧氏距离)是一个通常采用的距离定义,指在m维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点的距离)。在二维和三维空间中的欧氏距离就是两点之间的实际距离。

 

2.公式

3.注意事项

a.因为计算是基于各维度特征的绝对数值,所以欧氏度量需要保证各维度指标在相同的刻度级别,比如对身高(cm)和体重(kg)两个单位不同的指标使用欧式距离可能使结果失效。

 

b.欧几里得距离是数据上的直观体现,看似简单,但在处理一些受主观影响很大的评分数据时,效果则不太明显;比如,U1对Item1,Item2 分别给出了2分,4分的评价;U2 则给出了4分,8分的评分。通过分数可以大概看出,两位用户褒Item2 ,贬Item1,也许是性格问题,U1 打分更保守点,评分偏低,U2则更粗放一点,分值略高。在逻辑上,是可以给出两用户兴趣相似度很高的结论。如果此时用欧式距离来处理,得到的结果却不尽如人意。即评价者的评价相对于平均水平偏离很大的时候欧几里德距离不能很好的揭示出真实的相似度。

 

4.代码实现

#得到两者共同评分项

defGetSameItem(UL,p1,p2):

        si = {}

        for item in UL[p1]:

               if item in UL[p2]:

                       si[item] = 1

        return si

 

#欧几里得相似度算法

defEuclidSimilarity(UL,p1,p2):

        si = GetSameItem(UL,p1,p2)

        if len(si) == 0:

               return 0

        sum_of_squares = sum([pow(UL[p1][item] -UL[p2][item] , 2) for item in si])

        return 1/(1+math.sqrt(sum_of_squares))

 


### 计算距离相似度的算法 在计算机科学中,计算两个对象之间的距离或相似度是一个常见的需求。这种技术广泛应用于机器学习、数据挖掘以及模式识别等领域。以下是关于如何实现一种基于欧几里得距离距离相似度算法。 #### 距离相似度的概念 距离相似度通常用于衡量两组或多组数据点之间的接近程度。最常用的几种距离度量方法包括欧几里得距离 (Euclidean Distance)[^1] 和余弦相似度 (Cosine Similarity)。其中,欧几里得距离是一种简单而有效的几何距离测量方式,在多维空间中的应用尤为普遍。 对于给定的数据集 \(X\) 中的一对样本 \(\mathbf{x}_i\) 和 \(\mathbf{x}_j\) ,它们可以表示为向量形式,则其欧几里得距离定义如下: \[ d_{ij} = \sqrt{\sum_{k=1}^{n}(x_{ik}-x_{jk})^2} \] 这里 \(n\) 表示维度数,\(x_{ik}\) 是第 \(i\) 个样本在第 \(k\) 维上的坐标值。 #### 实现代码示例 下面提供了一个简单的 Python 函数来计算两个 n 维向量间的欧几里得距离: ```python import numpy as np def euclidean_distance(vector_a, vector_b): """ Calculate the Euclidean distance between two vectors. Parameters: vector_a (list or array): First input vector. vector_b (list or array): Second input vector. Returns: float: The computed Euclidean distance. """ vec_a = np.array(vector_a) vec_b = np.array(vector_b) diff = vec_a - vec_b squared_diff = np.square(diff) sum_squared_diff = np.sum(squared_diff) result = np.sqrt(sum_squared_diff) return result # Example usage vector_1 = [1, 2, 3] vector_2 = [4, 5, 6] print(euclidean_distance(vector_1, vector_2)) ``` 上述函数通过 NumPy 库实现了高效的矩阵运算操作,从而简化了复杂的数学表达式并提高了运行效率[^2]。 #### 结论 利用以上介绍的方法和代码片段,你可以轻松地构建自己的距离相似度评估工具,并将其集成到更复杂的应用场景之中,比如聚类分析或者推荐系统等项目当中去。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值