모든 영화를 한 번에 비교하기
데이터셋에서 임의의 두 영화 간 Jaccard 유사도를 구하는 방식은 소규모 분석에는 유용하지만, 더 큰 데이터셋에서 추천을 만들 때는 속도가 느려질 수 있어요.
이번 연습에서는 모든 영화 간 유사도를 구해, 빠르고 쉽게 조회할 수 있도록 DataFrame에 저장해 보겠습니다.
DataFrame의 행들 사이 유사도를 구할 때 모든 쌍을 개별적으로 순회하며 계산할 수도 있지만, scipy의 pdist()(pairwise distance) 함수를 사용하는 편이 더 효율적이에요.
같은 라이브러리의 squareform()을 이용해 원하는 직사각형 형태로 변환할 수 있어요. 그리고 우리는 거리(distance)가 아닌 유사도(similarity)가 필요하므로, 값을 1에서 빼서 유사도로 변환해야 해요.
movie_cross_table은 이미 불러와 두었습니다.
이 연습은 강의의 일부입니다
Python으로 추천 엔진 만들기
연습 안내
- 모든 영화 간 Jaccard 거리 값을 계산해
jaccard_similarity_array에 할당하세요. jaccard_similarity_array로부터 DataFrame을 만들고, 행과 열 이름은movie_genre_df.index를 사용하세요.- DataFrame의 상위 5개 행을 출력하고 유사도 점수를 살펴보세요.
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
# 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())