Zacznij terazZacznij za darmo

Porównywanie wszystkich filmów naraz

Wyznaczanie podobieństwa Jaccarda między dwoma pojedynczymi filmami w zbiorze danych sprawdza się w małych analizach, ale na większych zbiorach danych może być zbyt wolne, by generować rekomendacje w rozsądnym czasie.

W tym ćwiczeniu wyznaczysz podobieństwa między wszystkimi filmami i zapiszesz je w DataFrame, aby móc szybko i wygodnie je przeglądać.

Do obliczania podobieństw między wierszami DataFrame można przejść przez wszystkie pary i wyliczyć je osobno – znacznie wydajniej jest jednak skorzystać z funkcji pdist() (odległości parami) z biblioteki scipy.

Wynik można przekształcić do pożądanego prostokątnego kształtu za pomocą funkcji squareform() z tej samej biblioteki. Ponieważ zależy ci na wartościach podobieństwa, a nie odległości, odejmij otrzymane wartości od 1.

movie_cross_table zostało ponownie wczytane.

To ćwiczenie jest częścią kursu

Budowanie systemów rekomendacji w Pythonie

Zobacz kurs

Instrukcje do ćwiczenia

  • Oblicz miary odległości Jaccarda między wszystkimi filmami i przypisz wyniki do zmiennej jaccard_similarity_array.
  • Utwórz DataFrame z jaccard_similarity_array, używając movie_genre_df.index jako indeksu wierszy i kolumn.
  • Wyświetl 5 pierwszych wierszy DataFrame i przeanalizuj wartości podobieństwa.

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

# 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())
Edytuj i uruchom kod