Jämför alla filmer på en gång
Att beräkna Jaccard-likheten mellan två enskilda filmer i din datamängd fungerar bra för mindre analyser, men kan bli långsamt på större datamängder när rekommendationer ska genereras.
I den här övningen beräknar du likheterna mellan alla filmer och lagrar dem i en DataFrame för snabb och enkel uppslagning.
När du ska hitta likheterna mellan raderna i en DataFrame kan du gå igenom alla par och beräkna dem ett i taget – men det är mer effektivt att använda funktionen pdist() (pairwise distance) från scipy.
Resultatet kan formas om till önskad rektangulär form med hjälp av squareform() från samma bibliotek. Eftersom du vill ha likheter i stället för avstånd ska du subtrahera värdena från 1.
movie_cross_table har laddats in åt dig igen.
Den här övningen är en del av kursen
Bygga rekommendationsmotorer i Python
Övningsinstruktioner
- Beräkna Jaccard-avståndsmåtten mellan alla filmer och tilldela resultaten till
jaccard_similarity_array. - Skapa en DataFrame från
jaccard_similarity_arraymedmovie_genre_df.indexsom rader och kolumner. - Skriv ut de 5 översta raderna i DataFrame och granska likhetsmåtten.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
# 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())