Compararea tuturor filmelor dintr-o dată
Calcularea similarității Jaccard între două filme individuale din setul de date este utilă pentru analize la scară mică, însă pe seturi de date mai mari poate deveni lentă atunci când generezi recomandări.
În acest exercițiu, vei calcula similaritățile dintre toate filmele și le vei stoca într-un DataFrame pentru o căutare rapidă și ușoară.
Pentru a găsi similaritățile dintre rândurile unui DataFrame, ai putea parcurge toate perechile și le-ai putea calcula individual, dar este mai eficient să folosești funcția pdist() (distanță pereche) din scipy.
Rezultatul poate fi remodelat în forma dreptunghiulară dorită folosind squareform() din aceeași bibliotecă. Deoarece vrei valori de similaritate și nu distanțe, va trebui să scazi valorile din 1.
movie_cross_table a fost încărcat din nou pentru tine.
Acest exercițiu face parte din cursul
Construirea motoarelor de recomandare în Python
Instrucțiuni pentru exercițiu
- Calculează distanțele Jaccard dintre toate filmele și atribuie rezultatele variabilei
jaccard_similarity_array. - Creează un DataFrame din
jaccard_similarity_arrayfolosindmovie_genre_df.indexca rânduri și coloane. - Afișează primele 5 rânduri ale DataFrame-ului și analizează scorurile de similaritate.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
# 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())