시작하기무료로 시작하기

모든 영화를 한 번에 비교하기

데이터셋에서 임의의 두 영화 간 Jaccard 유사도를 구하는 방식은 소규모 분석에는 유용하지만, 더 큰 데이터셋에서 추천을 만들 때는 속도가 느려질 수 있어요.

이번 연습에서는 모든 영화 간 유사도를 구해, 빠르고 쉽게 조회할 수 있도록 DataFrame에 저장해 보겠습니다.

DataFrame의 행들 사이 유사도를 구할 때 모든 쌍을 개별적으로 순회하며 계산할 수도 있지만, scipypdist()(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())
코드 편집 및 실행