我正在使用基于理想值数组和数据收集数组的余弦相似度的计算分数。 (下面的代码)
但是,当我运行以下代码时,结果为99.4
,我认为这很奇怪,因为150与理想值300有很大不同。
import numpy as np
def cos_sim(speechrate, pitch): #speechrate and pitch are the data collected
v1 = np.array([300, 25]) #array of ideal values
v2 = np.array([speechrate, pitch]) #array of data
similarity = np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2))
print("{:.1f}".format(similarity*100))
cos_sim(150, 23)
有人知道如何根据值的差异计算分数吗? (不一定必须使用余弦相似度)
答案 0 :(得分:0)
您的similarity
公式可计算向量(300,25)
和(150,23)
之间的,换句话说,可以测量向量之间的夹角余弦。
如果您看下面的图,两个向量之间没有太多角度。
实际上,度与0
的最高值cos
的{{1}}度没有太大区别。
您在此处使用的指标应取决于您对相似性的定义。您可以使用的一个简单指标是两点之间的欧几里得距离。
这两个点之间的 Euclidean distance是1
。例如d = 150.01
和(300, 25)
之间的(280,23)
使您了解它们在2D平面中的分离程度。