一次比較所有電影
在小型分析中,計算資料集中任兩部電影的 Jaccard 相似度很實用,但在較大的資料集上用於產生推薦時,速度可能會偏慢。
在這個練習中,你會找出所有電影彼此之間的相似度,並將結果存成一個 DataFrame,方便快速查詢。
當要比較 DataFrame 內各列之間的相似度時,你可以逐一枚舉所有配對並各自計算,但更有效率的作法是使用 scipy 的 pdist()(pairwise distance)函式。
接著可用同一個函式庫的 squareform() 將結果重塑為需要的矩形陣列。由於你要的是相似度而非距離,記得用 1 減去距離值。
movie_cross_table 已為你載入。
本練習屬於課程
用 Python 建立推薦引擎
練習說明
- 計算所有電影之間的 Jaccard 距離,並將結果指定給
jaccard_similarity_array。 - 以
movie_genre_df.index作為列與欄,使用jaccard_similarity_array建立一個 DataFrame。 - 列印出該 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())