识别差异的最佳方法:欧几里德距离、余弦距离或简单减法?

Best way to identify dissimilarity: Euclidean Distance, Cosine Distance, or Simple Subtraction?

我是数据科学的新手,目前正在学习可以用 Python 完成的不同技术。目前,我正在尝试使用 Spotify 的 API 来播放我自己的播放列表。

目标是找到两个不同播放列表之间最不相似的特征。

我的问题是识别这两个播放列表之间最不同特征的最佳方法是什么?

我首先获取每个播放列表中的所有曲目及其各自的功能。然后我计算了每个特征的平均值。

这是我最终得到的 DataFrame。数据值是所有曲目特征对其各自播放列表的平均值

                   playlist1  playlist2
                   --------------------
danceability      | 0.667509   0.592140
energy            | 0.598873   0.468020
acousticness      | 0.114511   0.398372
valence           | 0.376920   0.287250
instrumentalness  | 0.005238   0.227783
speechiness       | 0.243587   0.088612

我做了一些挖掘,发现了两个常见的程序:

1.欧氏距离

2。余弦相似度

出于某种原因,我无法确定要使用哪一个并继续计算每个特征之间的绝对差异。简单的减法,因为这对我来说很直观。差异最大的特征是 'most dissimilar'.

通过这种方法,我最终使用了这些结果并得出结论,energyacousticness 是最不同的

                   playlist1    playlist2   absoluteDifference
                   ----------------------------------------------------
energy             |0.871310    0.468020    0.403290
acousticness       |0.041479    0.398372    0.356893
valence            |0.501890    0.287250    0.214640
instrumentalness   |0.049012    0.227783    0.178771
danceability       |0.531071    0.592140    0.061069
speechiness        |0.109587    0.088612    0.020975

我的直觉 correct/incorrect 我们什么时候会使用上述技术?这些技术是否适用于这种情况?

最后,我想把最重要的两个不同点作为我的 KNN 轴心。我的直觉是,我可以识别出两个播放列表最不同的特征,我将拥有一个更清晰、更明确的播放列表特征,并且可以更准确地预测一个播放列表应该属于哪首歌。

首先让我对欧氏距离和余弦相似度做一些简短的评论:

欧几里得距离测量n维space中两点的距离,即测量长度从A点到B点的直线

余弦相似度 衡量它们在方向上的相似性,即顶点为零的两点 A 和 B 之间的角度

让我添加一张图片来强调我的想法 A 点和 B 点之间的欧几里得距离用红色表示,余弦相似度用绿色表示(我的意思不是字面意思是测量的实际值,而是 与它们的计算相关的东西)

现在让我谈谈 总体上的度量 :任何和所有度量都描述了某种相似性。没有万能的"best metric"。最适合您的问题的指标始终由问题决定。

我在图片中添加了一些额外的点来表明这一事实:

  • 点 D 和 E 与 A 和 B 具有 相同的余弦相似度,但欧几里得距离
  • 相反,点 A 和 F 的余弦相似度与 A 和 B 的余弦相似度大不相同,但欧氏距离相同

现在,让我对您的特定问题的适当度量选择做一个评论:您希望评估特征之间的距离。差异越大,特征相距越远。你根本不关心点之间的角度。这是欧几里德距离的一个明确点。您可能没有意识到,您实际上在示例中使用了欧氏距离。你的特征是一维的,在1D中,欧氏距离等于绝对差。