Comparer tous vos films en une seule fois
Calculer la similarité de Jaccard entre deux films pris individuellement est très utile pour des analyses à petite échelle, mais cela peut devenir lent pour faire des recommandations sur de grands jeux de données.
Dans cet exercice, vous allez trouver les similarités entre tous les films et les stocker dans un DataFrame pour y accéder rapidement et facilement.
Pour calculer les similarités entre les lignes d’un DataFrame, vous pourriez parcourir toutes les paires et les calculer une à une, mais il est plus efficace d’utiliser la fonction pdist() (pairwise distance) de scipy.
Vous pouvez ensuite la remodeler dans la forme rectangulaire souhaitée avec squareform() de la même bibliothèque. Comme vous voulez des valeurs de similarité plutôt que des distances, vous devez soustraire les valeurs à 1.
movie_cross_table a de nouveau été chargé pour vous.
Cet exercice fait partie du cours
Créer des moteurs de recommandation en Python
Instructions
- Trouvez les mesures de distance de Jaccard entre tous les films et affectez les résultats à
jaccard_similarity_array. - Créez un DataFrame à partir de
jaccard_similarity_arrayen utilisantmovie_genre_df.indexcomme lignes et colonnes. - Affichez les 5 premières lignes du DataFrame et examinez les scores de similarité.
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
# 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())