相似度属性之距离

欧氏距离:

欧几里得度量定义欧几里得空间中,点 x = (x1,...,xn) 和 y = (y1,...,yn) 之间的距离为

d(x,y):=\sqrt{(x_1-y_1)^2 + (x_2-y_2)^2 + \cdots + (x_n-y_n)^2} = \sqrt{\sum_{i=1}^n (x_i-y_i)^2}

向量 \vec{x} 的自然长度,即该点到原点的距离为

\|\vec{x}\|_2 = \sqrt{|x_1|^2 + \cdots + |x_n|^2}.

它是一个纯数值。在欧几里得度量下,两点之间直线最短。

马氏距离

马氏距离是由印度统计学家马哈拉诺比斯(P. C. Mahalanobis)提出的,表示数据的协方差距离。它是一种有效的计算两个未知样本集 的相似度的方法。欧氏距离不同的是它考虑到各种特性之间的联系(例如:一条关于身高的信息会带来一条关于体重的信息,因为两者 是有关联的)并且是尺度无关的(scale-invariant),即独立于测量尺度。 对于一个均值为\mu = ( \mu_1, \mu_2, \mu_3, \dots , \mu_p )^T协方差矩阵\Sigma的多变量向量x = ( x_1, x_2, x_3, \dots, x_p )^T,其马氏距离为

D_M(x) = \sqrt{(x - \mu)^T \Sigma^{-1} (x-\mu)}

马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为\Sigma的随机变量 \vec{x} \vec{y}的差异程度:

 d(\vec{x},\vec{y})=\sqrt{(\vec{x}-\vec{y})^T\Sigma^{-1} (\vec{x}-\vec{y})}

如果协方差矩阵为单位矩阵,马氏距离就简化为欧氏距离;如果协方差矩阵为对角阵,其也可称为正规化的欧氏距离

 d(\vec{x},\vec{y})=\sqrt{\sum_{i=1}^p  {(x_i - y_i)^2 \over \sigma_i^2}}

其中\sigma_ix_i标准差

巴氏距离

在统计学中,巴氏距离(巴塔恰里雅距离 / Bhattacharyya distance)用于测量两离散概率分布。它常在分类中测量类之间的可分离性

在同一定义域X中,概率分布p和q的巴氏距离定义如下:其中(1)离散概率分布和(2)连续概率分布
巴氏距离公式.JPG
BC是巴氏系数(Bhattacharyya coefficient)。
对于多维的正态分布

p_i=\mathcal{N}(\boldsymbol\mu_i,\,\boldsymbol\Sigma_i)

D_B={1\over 8}(\boldsymbol\mu_1-\boldsymbol\mu_2)^T \boldsymbol\Sigma^{-1}(\boldsymbol\mu_1-\boldsymbol\mu_2)+{1\over 2}\ln \,\left({\det \boldsymbol\Sigma \over \sqrt{\det \boldsymbol\Sigma_1 \, \det \boldsymbol\Sigma_2} }\right)
其中

\boldsymbol\mu_i and \boldsymbol\Sigma_i分别是分布的期望与协方差矩阵

\boldsymbol\Sigma={\boldsymbol\Sigma_1+\boldsymbol\Sigma_2 \over 2}.
具体可参见wikipedia上的信息
### 欧氏距离余弦相似度的区别 在机器学习和数据分析领域,衡量样本间的相似性或距离是非常重要的操作之一。两种常用的度量方式分别是欧氏距离(Euclidean Distance) 和余弦相似度(Cosine Similarity),二者各有特点。 #### 定义上的区别 - **欧氏距离**定义为两个向量之间直线的距离,适用于数值型变量的空间中两点间最短路径长度的测量。具体公式如下: ```python import numpy as np def euclidean_distance(vec_a, vec_b): return np.sqrt(np.sum((vec_a - vec_b)**2)) ``` 这种度量方法考虑到了各个维度上绝对差值的影响,因此当不同属性的重要性不同时可能需要先做标准化处理[^4]。 - **余弦相似度**则是通过计算两个非零向量夹角的余弦值来反映它们方向的一致程度,取值范围[-1, 1],其中1表示完全相同的方向(-1相反),0垂直无关: ```python from sklearn.metrics.pairwise import cosine_similarity cos_sim = cosine_similarity([vec_a], [vec_b]) print(f"Cosine similarity between vectors: {cos_sim[0][0]}") ``` 此度量仅关注于角度而非大小,所以即使两对象的实际位置相差很大但如果指向一致也会得到较高的分数[^1]。 #### 应用场景的不同 - 对于那些关心实际物理意义下的差距情况的任务来说,比如地理位置分析、图像识别等,则更适合采用能够体现真实间距变化特性的**欧氏距离**作为评价标准;而对于文本分类、推荐系统这类更在意事物本质联系而不是表面数量关系的情形而言,基于方向判断的**余弦相似度**就显得尤为合适了[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值