인프런 커뮤니티 질문&답변

김남욱님의 프로필 이미지
김남욱

작성한 질문수

[개정판] 파이썬 머신러닝 완벽 가이드

아이템기반 최근접 이웃 협업필터링 영화 추천 구현 실습

predict_rating_topsim 함수 내 코드 질문

작성

·

154

0

def predict_rating_topsim(ratings_arritem_sim_arrn=20):
    # 사용자-아이템 평점 행렬 크기만큼 0으로 채운 예측 행렬 초기화
    pred = np.zeros(ratings_arr.shape)

    # 사용자-아이템 평점 행렬의 열 크기만큼 Loop 수행. 
    for col in range(ratings_arr.shape[1]):
        # 유사도 행렬에서 유사도가 큰 순으로 n개 데이터 행렬의 index 반환
        top_n_items = [np.argsort(item_sim_arr[:, col])[:-n-1:-1]]
        # 개인화된 예측 평점을 계산
        for row in range(ratings_arr.shape[0]):
            pred[row, col] = item_sim_arr[col, :][top_n_items].dot(ratings_arr[row, :][top_n_items].T) 
            pred[row, col] /= np.sum(np.abs(item_sim_arr[col, :][top_n_items]))        
    return pred
유사도 행렬에서 유사도가 큰 순으로 n개 데이터 행렬의 index를 반환하는 코드에서 볼드처리된 부분이 어떤 것을 의미하는지 헷갈려서 질문드립니다ㅠㅠ
유사도 행렬에서 col에 해당하는 영화의 유사도 값을 큰 순으로 내림차순하는데 중간에 -n-1이 어떤 의미로 첨가된 것인지 알고싶습니다.

답변 2

0

김남욱님의 프로필 이미지
김남욱
질문자

예시를 통해서 확실히 이해했습니다!! 감사합니다

0

권 철민님의 프로필 이미지
권 철민
지식공유자

역순으로 array을 가져올 때(즉 맨 뒤 array 값 부터 가져올 때) array[:-n-1:-1]을 적용합니다

역순으로 20개 array를 가져 올때는 array[:-21:-1], 역순으로 19개 array를 가져올 때는 array[:-20:-1] 을 적용합니다. 아래 코드로 테스트 해보시면 됩니다. 

import numpy as np

arr1 = np.arange(0, 20)
arr_reversed_1 = arr1[:-10:-1]
arr_reversed_2 = arr1[:-11:-1]
print(arr_reversed_1, arr_reversed_2)

김남욱님의 프로필 이미지
김남욱

작성한 질문수

질문하기