-
카테고리
-
세부 분야
딥러닝 · 머신러닝
-
해결 여부
미해결
predict_rating_topsim함수
21.01.13 17:40 작성 조회수 197
0
predict_rating_topsim을 강사님이 작성하신 함수를 보고 조금 수정해서 작성해봤는데요.. mse계산을 하면 다르게 나와서 무엇이 잘못된건지 알고싶습니다!!
*****강사님 코드******
def predict_rating_topsim(ratings_arr, item_sim_arr, n=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
******다르게 작성해본 코드******
def predict_rating_topsim(ratings_arr, item_sim_arr, n=20):
# 미리 0으로 초기화된 행렬만들어놓자
pred = np.zeros(ratings_arr.shape)
for col in range(ratings_arr.shape[1]):
top_n_items = [np.argsort(item_sim_arr[:,col])[-n: ]]
for row in range(ratings_arr.shape[0]):
pred[row,col] = ratings_arr[row, :][top_n_items].dot(item_sim_arr[: ,col][top_n_items].T)
pred[row,col] /= np.sum(np.abs(item_sim_arr[col, : ][top_n_items]))
return pred
바꾼부분을 bold처리 해놨습니다.
첫번째 부분은 유사도가 가장 높은 20개를 가져오는 것이라 [-n: ]으로 바꿨습니다
두번째 부분은 내적부분을 수정했습니다.
그렇게 한뒤 mse를 측정해보면
ratings_pred = predict_rating_topsim(ratings_matrix.values , item_sim_df.values, n=20)
print('아이템 기반 인접 TOP-20 이웃 MSE: ', get_mse(ratings_pred, ratings_matrix.values ))의 출력결과가
이이와같습니다
답변을 작성해보세요.
0
권 철민
지식공유자2021.01.14
안녕하십니까,
테스트 해보니, 저는 변경한 함수와 기존 함수가 동일한 값을 반환하고 있습니다.
커널을 재 기동하고 다시한번 테스트 해보심이 어떠신지요?
감사합니다.
답변 1