(1)闵可夫斯基(Minkowski)距离 其中r是一个参数,n是属性/维度的数目, pk 和 qk分别是两个数据对象p和q第k个属性的值。 ①当r = 1时,称为:街区(曼哈顿, 出租车, L1 范数) 距离 ②当r = 2时,称为: 欧几里得距离( L2 范数) ③当r , 称为: “上确界” (Lmax , L 范数) 距离. (2)如果 d1 和 d2 是两个向量数据,那么余弦相似度 cos( d1, d2 ) = (d1 d2) / ||d1|| ||d2|| , 其中 表示向量的点积(内积), || d || 是向量的模(长度) (3)马哈拉诺比斯(Mahalanobis)距离 其中 是输入数据X的协方差矩阵 根据上面距离和相似度的定义,在Distance.py中补充相关代码,并调试通过运行获取计算结果。 (1)实现街区距离的计算函数。(5分) (2)实现欧几里得距离的计算函数。(5分) (3)实现“上确界”距离的计算函数。(5分) (4)实现余弦相似度的计算函数。(15分) (5)实现马哈拉诺比斯(Mahalanobis)距离的计算函数,使用给定的两个向量做属性数据计算协方差,仅计算首尾两个点的距离即可。
时间: 2024-03-10 13:43:21 浏览: 75
很好,你的问题是关于距离和相似度的计算方法。以下是答案:
1. 街区距离的计算函数:
```python
def manhattan_distance(p, q):
return sum(abs(pk - qk) for pk, qk in zip(p, q))
```
2. 欧几里得距离的计算函数:
```python
import math
def euclidean_distance(p, q):
return math.sqrt(sum((pk - qk) ** 2 for pk, qk in zip(p, q)))
```
3. “上确界”距离的计算函数:
```python
def chebyshev_distance(p, q):
return max(abs(pk - qk) for pk, qk in zip(p, q))
```
4. 余弦相似度的计算函数:
```python
def cosine_similarity(p, q):
dot_product = sum(pk * qk for pk, qk in zip(p, q))
magnitude_p = math.sqrt(sum(pk ** 2 for pk in p))
magnitude_q = math.sqrt(sum(qk ** 2 for qk in q))
return dot_product / (magnitude_p * magnitude_q)
```
5. 马哈拉诺比斯距离的计算函数:
```python
import numpy as np
def mahalanobis_distance(p, q, covariance_matrix):
diff = np.array(p) - np.array(q)
inv_covariance_matrix = np.linalg.inv(covariance_matrix)
return np.sqrt(np.dot(np.dot(diff, inv_covariance_matrix), diff.T))[0][0]
```
其中,p和q是两个向量数据,covariance_matrix是输入数据X的协方差矩阵。
阅读全文