开始使用免费开始使用

一次性比较所有电影

在小规模分析中计算任意两部电影之间的 Jaccard 相似度非常有用,但在更大的数据集上用于推荐时可能会较慢。

在本练习中,您将计算所有电影之间的相似度,并将结果存入一个 DataFrame,便于快速查找。

当需要计算 DataFrame 各行之间的相似度时,您可以遍历所有成对组合逐一计算,但更高效的做法是使用 scipy 中的 pdist()(成对距离)函数。

随后可使用同一库中的 squareform() 将结果重塑为所需的矩形形状。由于我们需要的是相似度而不是距离,您应当用 1 减去这些距离值得到相似度。

movie_cross_table 已为您加载。

本练习是课程的一部分

用 Python 构建推荐引擎

查看课程

练习说明

  • 计算所有电影之间的 Jaccard 距离度量,并将结果赋给 jaccard_similarity_array
  • 使用 jaccard_similarity_array 创建一个 DataFrame,行索引和列索引均使用 movie_genre_df.index
  • 打印该 DataFrame 的前 5 行,并查看相似度分数。

交互式实操练习

通过完成这段示例代码来试试这个练习。

# Import functions from scipy
from scipy.spatial.distance import pdist, squareform

# Calculate all pairwise distances
jaccard_distances = ____(movie_cross_table.values, metric='____')

# Convert the distances to a square matrix
jaccard_similarity_array = 1 - ____(____)

# Wrap the array in a pandas DataFrame
jaccard_similarity_df = pd.____(jaccard_similarity_array, ____=movie_cross_table.index, ____=movie_cross_table.index)

# Print the top 5 rows of the DataFrame
print(jaccard_similarity_df.head())
编辑并运行代码