• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    미해결

predict_rating_topsim 함수 내 코드 질문

21.05.24 16:59 작성 조회수 109

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

김남욱님의 프로필

김남욱

질문자

2021.05.24

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

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)