我是数据科学的新手,目前正在学习我可以用 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. 余弦相似度

由于某种原因,我无法考虑使用哪个,并继续计算每个特征之间的绝对差异。简单的减法,因为这对我来说很直观。具有最大差异的特征将是“最不同的”。

通过这种方法,我最终使用了这些结果并得出结论, 能量 声学 是最不同的
                   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

我的直觉是否正确?我们什么时候会使用上述技术?这些技术中的任何一种都适用于这种情况吗?

最终,我想取前两个不同之处,并将它们作为 KNN 的轴心。我的直觉是,我可以识别两个播放列表中最不同的特征,我将拥有更清晰、更明确的播放列表特征,并且可以更准确地预测播放列表应该属于哪首歌曲。

最佳答案

让我从欧几里得距离和余弦相似度的一些简短评论开始:

欧几里得距离 测量 n 维空间中两点相距多远,即它测量从 A 点到 B 点的直线长度

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

让我添加一张图片来强调我的想法
pandas - 识别差异的最佳方法 : Euclidean Distance, 余弦距离或简单减法?-LMLPHP
点 A 和 B 之间的欧几里得距离用红色表示,余弦相似度用绿色表示(我不是字面上的意思是度量的实际值,而是与它们的计算相关的值)

现在让我谈谈一般的 度量 :任何和所有度量都描述了某种相似性。没有通用的“最佳指标”这样的东西。最适合您的问题的指标始终由问题决定。

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

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

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

    关于pandas - 识别差异的最佳方法 : Euclidean Distance, 余弦距离或简单减法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53173654/

    10-17 03:03