開始使用免費開始

一次比較所有電影

在小型分析中,計算資料集中任兩部電影的 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())
編輯並執行程式碼