강의

멘토링

로드맵

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

1987님의 프로필 이미지
1987

작성한 질문수

(UPDATED) Python을 이용한 개인화 추천시스템 | 추천알고리즘 | 추천인공지능

Keras로 mf 구현하기 에러

해결된 질문

작성

·

267

1

모델 fitting 할 때 이런 에러가 계속 뜹니다,,, 강의에 사용한 코드와 동일하게 입력했는데 해결이 되지 않습니다ㅠㅠ

답변 1

0

거친코딩님의 프로필 이미지
거친코딩
지식공유자

안녕하세요.!

질문 남겨주셔서 감사합니다.

해당 에러를 보니까 학습자님의 input 값에 2147483647 이란 값이 있는데, 이 값이 구축하신 embedding layer에 올바르지 않다고 나와있네요.
아래 예시코드와 같이 한번 해보시구 그래도 안되시면 코드 & 에러 첨부해주셔서 다시 한번 연락주시면 감사하겠습니다.

-거친코딩 드림-

 

# 학습 및 테스트 데이터 받기
r_cols = ['user_id','movie_id','rating','timestamp']
ratings = pd.read_csv('drive/MyDrive/RecoSys/Data/u.data',
names=r_cols,
sep='\t',
encoding='latin-1')

ratings_train,ratings_test = train_test_split(ratings,
test_size=0.2,
shuffle=True,
random_state=2021)
 
====================
모델 구축 부분 생략
====================
 
 
# Model fitting
# 위에서 구성한 신경망을 학습시키는 부분
result = model.fit(
# train set의 입력을 지정하는 부분으로,
# 입력은 각 사용자와 아이템을 구분하기 위한
# One-hot encoding을 위해서 각 사용자와 아이템의 ID가 사용된다.
x=[ratings_train.user_id.values,
ratings_train.movie_id.values],
# train set의 출력을 지정하는 부분
# 출력은 평점값에서 전체평균을 빼서 사용한다.
# 전체 평균을 빼는 이유는 앞에서 설명한 것과 같이
# 전체 평균을 신경망 모델에 직접 넣는 것은 복잡하기 때문이다.
y=ratings_train.rating.values - mu,
# 학습 반복 횟수를 지정한다.
epochs=60,
# 한 번에 학습하는 batch 크기를 지정한다.
batch_size=256,
# 정확도 측정을 위한 test set을 지정한다.
validation_data=(
[ratings_test.user_id.values,
ratings_test.movie_id.values],
ratings_test.rating.values - mu
)
)
1987님의 프로필 이미지
1987
질문자

제가 외부 데이터를 가지고 해보는 중이라 m,n 값을 이렇게 수정해서 그런걸까요?

거친코딩님의 프로필 이미지
거친코딩
지식공유자

네! 보여주신 코드 그대로 임베딩 레이어의 수는 고유 유니크한 id의 개수만큼 생성되는데, 값 자체가 1씩 증가하는 연속적인 값이 아니니 인덱스와 따로 노는 것입니다.

(임베딩 자체가 유저 데이터가 representation(one hot encoding) 되었다는 것을 가정하기 때문)

이러한 경우에는  index mapping 한번 해주신다음에 돌리시면 좋을거 같아요~!
예를들어 유저id :2356335 -> 1 , 2544654->2, ...

한번 위와 같이 매핑하신다음에 돌려보시구 피드백 주시면 감사하겠습니다:)

 

1987님의 프로필 이미지
1987
질문자

Index mapping을 아직 못해서 임의로 값들을 연속되는 수로 만들었더니 해결되었습니다! 감사합니다:)

혹시 user id에 중복된 값이 있으면 어떻게 id 값을 바꿔줄 수 있을까요?

거친코딩님의 프로필 이미지
거친코딩
지식공유자

연속되는 수로 만드셔서 일단 해결하셨다니 다행입니다 ㅎㅎ

하지만 단순히 연속되는 수로 하셨으면 말씀하신대로 중복유저 문제에 부딪히셨을것입니다. 그래서 단순 연속되는 숫자를 사용하시는것에 조금 더 나아가 중복체크를 하면서 연속 숫자로 만드셔보길 바랍니다:) 

예)

<Origin data>

13,19,17,13,20

<Transformed data>

1,2,3,1,4

1987님의 프로필 이미지
1987

작성한 질문수

질문하기