Порівняння всіх ваших фільмів одночасно
Обчислювати схожість Жаккара між будь‑якими двома окремими фільмами у вашому наборі даних зручно для невеликих аналізів, але на великих наборах даних це може бути повільно для формування рекомендацій.
У цій вправі ви знайдете схожість між усіма фільмами та збережете її в DataFrame для швидкого та зручного пошуку.
Коли ви обчислюєте схожість між рядками DataFrame, можна пройтися по всіх парах і рахувати їх окремо, але ефективніше скористатися функцією pdist() (pairwise distance) із scipy.
Отриманий результат можна надати потрібної прямокутної форми за допомогою squareform() із тієї ж бібліотеки. Оскільки вам потрібні значення схожості, а не відстані, слід відняти ці значення від 1.
movie_cross_table уже завантажено для вас.
Ця вправа є частиною курсу
Створення систем рекомендацій у Python
Інструкції до вправи
- Знайдіть міри відстані Жаккара між усіма фільмами та присвойте результати змінній
jaccard_similarity_array. - Створіть DataFrame з
jaccard_similarity_array, використавшиmovie_genre_df.indexяк індекси рядків і стовпців. - Виведіть перші 5 рядків DataFrame і перегляньте бали схожості.
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
# 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())