10%
39,600원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨Python을 이용한 개인화 추천시스템 | 추천알고리즘 | 추천인공지능
4장 SGD를 사용한 MF 기본 알고리즘 오류
안녕하세요좋은 강의 감사합니다. 4장 SGD를 사용한 MF 기본 알고리즘 오류 에서pivot 테이블을 만드는 과정에서 오류가 생겨 질문드립니다.아래와 같은 오류가 생기는데 어떤 이유인지요? 코드가 잘못된 것 같지는 않습니다.pivot 대신 pivot_table 을 쓰니 또 되네요. pivot_table 은 값이 중복인 경우에 첫 값을 쓴다고 되어있는데 올바른 해결책이 맞나요? R_temp = ratings.pivot(index = 'user_id', columns = 'movie_id', values = 'rating').fillna(0)--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-10-bcd5f752ec01> in <cell line: 1>() ----> 1 R_temp = ratings.pivot(index = 'user_id', 2 columns = 'movie_id', 3 values = 'rating').fillna(0) 7 frames /usr/local/lib/python3.10/dist-packages/pandas/core/reshape/reshape.py in _make_selectors(self) 187 188 if mask.sum() < len(self.index): --> 189 raise ValueError("Index contains duplicate entries, cannot reshape") 190 191 self.group_index = comp_index ValueError: Index contains duplicate entries, cannot reshape 추가로 질문드립니다. pivot_table을 사용해도 rmse가 계속 nan이 나오네요저는 코드가 잘못된 부분을 찾기가 힘든데 도움 부탁드립니다.prediction = self.b + self.b_u[i] + self.b_d[j] + self.P[i, :].dot(self.Q[j, :].T) 으로 바꾸어도 같은 오류가 납니다.class MF(): def __init__(self, ratings, hyper_params): self.R = np.array(ratings) self.num_users, self.num_items = np.shape(self.R) self.K = hyper_params['K'] # feature의 개수 self.alpha = hyper_params['alpha'] # learning rate self.beta = hyper_params['beta'] # regularization coef self.iterations = hyper_params['iterations'] # SGD 반복 횟수 self.verbose = hyper_params['verbose'] # 출력 여부 def rmse(self): xs, ys = self.R.nonzero() # R에서 0이 아닌 요소의 index self.predictions = [] self.errors = [] for x,y in zip(xs, ys): prediction = self.get_prediction(x,y) # 평점 예측치 함수 self.predictions.append(prediction) self.errors.append(self.R[x,y] - prediction) self.predictions = np.array(self.predictions) self.errors = np.array(self.errors) return np.sqrt(np.mean(self.errors**2)) def train(self): # P, Q 의 값 초기화 self.P = np.random.normal(scale = 1. / self.K, # 표준편차 설정, mean은 설정 안하면 자동으로 0 size = (self.num_users, self.K)) self.Q = np.random.normal(scale = 1. / self.K, size = (self.num_users, self.K)) self.b_u = np.zeros(self.num_users) # 사용자 평가경향 초기화 self.b_d = np.zeros(self.num_items) self.b = np.mean(self.R[self.R.nonzero()]) # 평점의 전체 평균, 0이 아닌 것에 대해서만 평균을 낸다. rows, columns = self.R.nonzero() # 평점이 있는 요소들의 idx만 가져오겠다는 뜻 --> 나중에 SGD를 적용하기 위해서 self.samples = [(i,j, self.R[i,j]) for i,j in zip(rows, columns)] training_process = [] # SGD 실행될때마다 RMSE 기록 for i in range(self.iterations): np.random.shuffle(self.samples) # 다양한 시작점 지정 self.sgd() rmse = self.rmse() training_process.append((i+1, rmse)) if self.verbose: if (i+1) % 10 == 0: print('Iteration : %d ; train RMSE = %.4f'%(i+1, rmse)) return training_process def get_prediction(self, i,j): # i 유저의 j 번째 아이템에 대한 예측치 # 전체 평점 + 유저의 경향성 + 아이템의 경향성 + i번째 유저의 j번째 아이템에 대한 예측 prediction = self.b + self.b_u[i] + self.b_d[j] + self.P[i, :].dot(self.Q[j, ].T) return prediction def sgd(self): for i,j,r in self.samples: # i,j는 인덱스, r은 평점 prediction = self.get_prediction(i,j) e = (r-prediction) # 오차 # 사용자의 평가경향 업데이트, 4장 슬라이드 10페이지 식 self.b_u[i] += self.alpha * (e - (self.beta * self.b_u[i])) self.b_d[j] += self.alpha * (e - (self.beta * self.b_d[j])) self.P[i,:] += self.alpha * ((e * self.Q[j,:]) - (self.beta * self.P[i,:])) self.Q[j,:] += self.alpha * ((e * self.P[i,:]) - (self.beta * self.Q[j,:])) # 원코드는 pivot_table 대신 pivot 사용 R_temp = ratings.pivot_table(index = 'user_id', columns = 'movie_id', values = 'rating').fillna(0) hyper_params = { 'K':30, 'alpha' : 0.001, 'beta' : 0.02, 'iterations' : 100, 'verbose' : True } mf = MF(R_temp, hyper_params) train_process = mf.train() get_prediction 함수에서 아래를 해보니까, 처음에는 조금 숫자가 나오다가 계속 nan이 나오는데 여기에서 문제가 있는것 같습니다. 근데 원인을 모르겠어요; print(self.b) print(self.b_u[i]) print(self.b_d[j]) print(self.P[i, :].dot(self.Q[j, ].T))
- 해결됨Python을 이용한 개인화 추천시스템 | 추천알고리즘 | 추천인공지능
2장 사용자집단별 추천 코드 질문
안녕하세요좋은 강의 감사합니다.2장 사용자집단별 추천 부분 코드 질문이 있어서 문의드립니다.def score(model): id_pairs = zip(x_test['user_id'], x_test['movie_id']) y_pred = np.array([model(user,movie) for (user, movie) in id_pairs]) y_true = np.array(x_test['rating']) return RMSE(y_true, y_pred)부분에서요id_pairs는 25000개 인데, 코드를 돌리고 y_pred나 y_true를 출력해보면 168개밖에 안나오더라고요. 이게 무슨 이유 때문인지 잘 이해가 가지 않는데 설명이 가능하실까요? 감사합니다!
- 해결됨Python을 이용한 개인화 추천시스템 | 추천알고리즘 | 추천인공지능
model.predict 의 결과 값 index가 왜 movie id ?
predictions = model.predict([tmp_user, tmp_movie_data])아래와 같이 결과 값이 나오잖아요. 그런데, 저 결과의 index가 왜 movie id 인가요? [[3.9839544] [3.178115 ] [2.9170113] ... [2.1295495] [3.9083176] [3.711278 ]]
- 해결됨Python을 이용한 개인화 추천시스템 | 추천알고리즘 | 추천인공지능
model.predict에 특정 user id로 상위 movie 5개 출력?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 추천시스템을 다양한 방법을 통하여 쉽게 설명해 주셔서 감사합니다.질문과 같이, compile -> fit 해서 생성된 model에특정 user id 를 입력하여 추천된 상위 movie 5개를 출력해보려고 합니다. 강의 예제의 아래 부분의 user_id와 movie_id 그리고 직업을 입력해서해당 predictions 값에서 상위 movie를 가져올 수 있지 않을까 생각중 입니다. predictions = model.predict([user_ids, movie_ids, user_occ]) + mu 문제는, 딱 여기서 막혔습니다. 예제에는 6개의 사용자, 영화, 직업 받아서Predictions: [[4.0556927] [3.5347672] [2.4461157] [4.1715736] [3.9802952] [3.9247046]] 이렇게 보여지는 것같아서, 저것을 어떻게 사용해서, 영화 목록 5개면 5개 ,10개면 10개를 가져올 수 있을까요?
- 해결됨Python을 이용한 개인화 추천시스템 | 추천알고리즘 | 추천인공지능
새로운 회원이 선택한 영화를 모델로 넘기는 방법 질문
안녕하세요 거친코딩님 현재 프로젝트 기획 구상 단계 인데요~현재까지 구상한 것은 거친코딩님이 올려주신 데이터를 구현한 모델(최신 데이터가 된다면 Sparse Matrix를 쓰고, 기존 올려주신 데이터를 활용하게 된다면, 협업필터링으로 모델을 구현하고자 합니다.)을 훈련시킨 다음, 이제 새 회원이 평점을 매긴 영화를 입력값으로 받아 영화를 추천해주는 웹 프로젝트를 하려고 합니다.현재 팀원은 3명이고, 각 각프론트엔드, 백엔드(스프링, DB-MySQL), 추천알고리즘 입니다.근데 지금 막히는 것이 기존데이터가 아닌 클라이언트에서 새로운 회원이 선택한 영화를 추천알고리즘으로 넘기는 것을 어떻게 해야할지 모르겠습니다.이 부분을 새로운 함수로 구현을 해야하는 것인지, 아니면 알려주신 알고리즘을 기반으로 수정으로도 구현이되는 것이 궁금합니다.
- 해결됨Python을 이용한 개인화 추천시스템 | 추천알고리즘 | 추천인공지능
올려주신 파일과 sparse matrix
안녕하세요, 거친코딩님!올려주신 강의와 파일들을 보면서, 프로젝트를 하다가 궁금한게 있어서 질문드립니다. 강의에서 올려준 파일 u.user, u.item, u.data와 rating-20m.csv가 별개의 영화 평가 데이터 파일들 인가요? Sparse Matrix 알고리즘에서 rating-20m.csv 파일만 쓰여서 궁금해서 여쭤봅니다. 1)에서 질문한것이 맞다면 최신 무비렌즈 영화평가 데이터를 Sparse Matrix 에서 돌려도 될까요? (올려주신 rating-20m.csv파일과 최신 무비렌즈 영화 평가 데이터 내용이 똑같더라구요.) 강의에선 Sparse Matrix의 출력이 오차율이 나와서 그러는데, 최종적으로 추천 영화를 출력하려면 어떻게 구현하면 될까요?
- 해결됨Python을 이용한 개인화 추천시스템 | 추천알고리즘 | 추천인공지능
Unable to allocate 55.9 GiB for an array with shape (25000, 100000, 3) and data type int64
안녕하세요.사용자 집단별 추천에서 모델별 RMSE를 계산하는 함수를 돌리면 램이 부족하다며 코랩이 중지됩니다.주피터를 이용해 다시 돌려보니y_pred = np.array([model(user, movie) for (user, movie) in id_pairs])에서Unable to allocate 55.9 GiB for an array with shape (25000, 100000, 3) and data type int64라는 오류가 떴습니다.데이터 사이즈가 이렇게 크지 않을 것 같은데 어떤 부분을 잘못한걸까요?아래는 제가 작성한 score 함수입니다.def score(model): # test 데이터의 user_id와 movie_id의 페어를 맞춰서 튜플로 반환 id_pairs = zip(x_test['user_id'], x_test['movie_id']) # 모든 user, movie 페어쌍에 대해서 주어진 model의 예측값을 계산하여 array 형태로 반환 y_pred = np.array([model(user, movie) for (user, movie) in id_pairs]) y_true = np.array(x_test['rating']) return RMSE(y_true, y_pred)
- 해결됨Python을 이용한 개인화 추천시스템 | 추천알고리즘 | 추천인공지능
사용자 집단별 추천 코드
코드 내에서 score(model)안에 model로 best_seller, cf_gender등을 사용하셨는데, best_seller와 cf_gender함수는 user_id와 movie_id를 변수로 가지는데, score함수 안에 사용할 때는 score(best_seller)로 써도 작동되는 이유가 무엇인가요? score(best_seller(user_id, movie_id))와 같이 써야 작동되는것 아닌가요?
- 해결됨Python을 이용한 개인화 추천시스템 | 추천알고리즘 | 추천인공지능
무비렌즈 최신 데이터를 이용하고싶은데요~
안녕하세요 거친코딩님!해당 알고리즘을 최신 무비렌즈 데이터를 이용해서 구현하려하는데요.해당 압축파일에 있는 파일과 강사님이 올려주신 파일이 확장자명이 다른데,최신파일로 구현하고자하면 밑에 파일에서 어떤걸 건들어야할까요?
- 해결됨Python을 이용한 개인화 추천시스템 | 추천알고리즘 | 추천인공지능
추천시스템의 이진데이터 적용
안녕하세요. 데이터분석 공부하는 학생입니다.올려주신 강의 모두 잘 들었습니다.다만 제가 지금 적용하고자 하는 데이터가 이진데이터인데요.강의의 코드가 이진데이터에는 맞지 않아 문의드립니다.이진데이터를 추천시스템에 활용하는 다른 예도 찾아 보았는데요: https://towardsdatascience.com/recommender-systems-item-customer-collaborative-filtering-ff0c8f41ae8a어차피 여기서도 코사인유사도를 활용하고 있어거친코딩님의 강의의 예를 활용하고 싶은데 잘 안되네요.혹시 한 번 봐주실 수 있을까요?적용 코드: https://drive.google.com/file/d/11qlP4zOAFewSiHxo_T7fp_Ql-WgSpHS3/view?usp=sharing
- 해결됨Python을 이용한 개인화 추천시스템 | 추천알고리즘 | 추천인공지능
평가 관련
안녕하세요 강사님. 평가 지표에 관련된 내용을 여쭤보려고 합니다. mAP, nDCG 같은 성능을 측정하려면 어떻게 해야 하나요?
- 해결됨Python을 이용한 개인화 추천시스템 | 추천알고리즘 | 추천인공지능
딥러닝 추천시스템 변수추가 부분 코드 관련 질문입니다.
기존에 코드에 나와있는 occupation에 더해 age 변수를 추가하고 싶습니다. 하지만 age embedding layer에 들어갈 input dimension을 len(users['age'].unique()) 라 설정하고 모델을 fit 시키면 InvalidArgumentError: Graph execution error: 라는 에러가 뜹니다. 이때, age embedding layer의 input dimension을 len(users)라고 설정하면 fit 코드가 정상적으로 진행됩니다. 그 이유와 변수 embedding layer의 input dimesion을 설정할 때 꼭 unique 값의 개수를 넣어야 하는건지, 그리고 그 이유 도 알고 싶습니다.
- 해결됨Python을 이용한 개인화 추천시스템 | 추천알고리즘 | 추천인공지능
딥러닝을 위한 추천시스템 원핫 인코딩 질문
148페이지 그림을 보면 유저아이디와 아이템 아이디를 원핫벡터 인코딩 한후에 임베딩 레이어에 들어가는데 왜 책에 있는 코드는 원한 인코딩을 적용 하지 않는지 궁금합니다. 원핫 인코딩을 적용하지 않은 이유를 알려주셨으면 합니다.
- 해결됨Python을 이용한 개인화 추천시스템 | 추천알고리즘 | 추천인공지능
CF_knn_bias 실습에서 not in index error 발생합니다.
movie_ratings = movie_ratings[user_idx][-neighbor_size:]에서 아래와 같은 에러가 발생합니다KeyError: '[68, 70, 62, 31, 7, 73, 84, 1, 52, 0, 89, 6, 33, 53, 14, 26, 82, 23, 46, 63, 12, 39, 19, 44, 4, 30, 81, 10, 27, 79, 21, 45, 25, 87, 57, 40, 80, 78, 24, 86, 88, 76, 64, 2, 28, 71, 11, 37, 85, 55, 54, 66, 9, 42, 75, 36, 67, 43, 32, 50, 29, 58, 61, 72, 34, 74, 18, 22, 77, 60, 3, 47, 49, 15, 51, 56, 65, 69, 90, 16, 41] not in index'movie_ratings 프린트 결과는 아래와 같이 나옵니다! movie_ratings user_id 5 -1.816794 8 -1.636364 13 -0.064990 17 -1.761905 20 0.833333 ... 881 -1.340206 882 -0.097087 887 -2.796875 901 -1.817204 938 0.740741 Name: 243, Length: 91, dtype: float64실습 데이터 말고 colab 코드도 제공받을 수 있나요?확인부탁드립니다!감사합니다 :)
- 해결됨Python을 이용한 개인화 추천시스템 | 추천알고리즘 | 추천인공지능
MergeError가 납니다
강의 12분 26초에 성별에 따른 예측값 계산할 때, pd.merge(x_train, users) 부분에서 MergeError: No common columns to perform merge on. Merge options: left_on=None, right_on=None, left_index=False, right_index=False와 같은 에러메시지가 뜹니다. 어떻게 해결하면 될까요?
- 해결됨Python을 이용한 개인화 추천시스템 | 추천알고리즘 | 추천인공지능
sparse matrix를 추천 알고리즘에 적용하기에서
안녕하세요 거친코딩님! Sparse Matrix를 추천 알고리즘에 적용하기 파트에서 #Sparse matrix를 추천 알고리즘에 적용 import os import numpy as np import pandas as pd base_src = 'drive/MyDrive/RecoSys/Data' ratings_20m_src = os.path.join(base_src,'ratings-20m.csv') r_cols = ['user_id','movie_id','rating','timestamp'] # 20M data 읽기 ratings = pd.read_csv(ratings_20m_src, names=r_cols, sep=',', encoding='latin-1') R_temp = ratings.pivot(index='user_id',columns='movie_id',values='rating').fillna(0) 이 코드는 오류가 난다 하셨잖아요?(too big) 근데 코랩에서 계속 정상적으로 실행이 되는데.. 왜 그런건가요?
- 해결됨Python을 이용한 개인화 추천시스템 | 추천알고리즘 | 추천인공지능
코드 오류 질문입니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해 계속 저런 오류가 뜨는데 어떻게 해결할 수 있을까요?? 그리고 데이터 파일은 어디서 받아볼 수 있을까요??
- 해결됨Python을 이용한 개인화 추천시스템 | 추천알고리즘 | 추천인공지능
코드를 똑같이 따라햇을때
데이터프레임에서 강의에 나오는거랑 같지 않은 값들이 나온다면 사이에 먼가 코드를 잘못 짰다고 봐도 될까요?
- 해결됨Python을 이용한 개인화 추천시스템 | 추천알고리즘 | 추천인공지능
강의자료는 어디서 다운로드 받을 수 있나요?
강의자료는 어디서 다운받을 수 있나요? OT의 PDF 말고 수업이 진행되는 ppt또는 pdf 자료를 어디서 받나요?
- 해결됨Python을 이용한 개인화 추천시스템 | 추천알고리즘 | 추천인공지능
train,test 분리 MF알고리즘에서 결과가 출력이 안되요 ㅠㅠ
안녕하세요 거친코딩님. 해당 챕터에서 코드를 작성해서 돌려봤는데요~ 마지막에 하셨던 full_prediction과 get_one_prediction은 잘 출력되었는데, result=mf.test()만 출력이 안돼요 ㅠㅠ 코랩에서 체크모양은 떴는데, 결과값 출력이 안나와요.. import os import numpy as np import pandas as pd base_src = 'drive/MyDrive/RecoSys/Data' u_data_src = os.path.join(base_src,'u.data') r_cols = ['user_id','movie_id','rating','timestamp'] ratings = pd.read_csv(u_data_src, sep='\t', names = r_cols, encoding='latin-1') #timestamp 제거 ratings = ratings[['user_id','movie_id','rating']].astype(int) # train set과 test set 분리 from sklearn.utils import shuffle #데이터가 imbalance하면 계층화추출, balance하면 셔플(계층화추출하면, 표본의 대표성을 저해할 수 있기때문에) TRAIN_SIZE = 0.75 #(사용자-영화-평점) ratings = shuffle(ratings,random_state=2021) cutoff = int(TRAIN_SIZE * len(ratings)) ratings_train = ratings.iloc[:cutoff] ratings_test = ratings.iloc[cutoff:] class NEW_MF(): def __init__(self,ratings,hyper_params): self.R = np.array(ratings) #사용자 수(num_users)와 아이템 수 (num_items)를 받아온다. self.num_users,self.num_items = np.shape(self.R) #아래는 MF weight 조절을 위한 하이퍼 파라미터 # K : 잠재요인(Latent Factor)의 수 self.K = hyper_params['K'] # alpha : 학습률 self.alpha = hyper_params['alpha'] # beta : 정규화 계수 self.beta = hyper_params['beta'] # iterations : SGD의 계산을 할 때의 반복 횟수 self.iterations = hyper_params['iterations'] # verbose : SGD의 학습 과정을 중간중간에 출력할 것인지에 대한 여부 self.verbose = hyper_params['verbose'] # 데이터가 연속적이지 않을 때, 인덱스와 맞지 않는 것을 방지하기위해 맵핑해주는 작업 item_id_index = [] index_item_id = [] for i, one_id, in enumerate(ratings): #i:enumerate의 idx, one_id : movie_id item_id_index.append([one_id,i]) index_item_id.append([i,one_id]) self.item_id_index = dict(item_id_index) self.index_item_id = dict(index_item_id) user_id_index = [] index_user_id = [] for i, one_id, in enumerate(ratings.T): user_id_index.append([one_id,i]) index_user_id.append([i,one_id]) self.user_id_index = dict(user_id_index) self.index_user_id = dict(index_user_id) def rmse(self): # self.R에서 평점이 있는(0이 아닌) 요소의 인덱스를 가져온다. xs,ys = self.R.nonzero() # prediction과 error를 담을 리스트 변수 초기화 self.predictions = [] self.errors = [] # 평점이 있는 요소(사용자 x, 아이템 y) 각각에 대해서 아래의 코드를 실행 for x,y in zip(xs,ys): #사용자 x, 아이템 y에 대해서 평점 예측치를 get_prediction()함수를 사용해서 계산 prediction=self.get_prediction(x,y) # 예측값을 예측값 리스트에 추가 self.predictions.append(prediction) # 실제값(R)과 예측값의 차이(errors) 계산해서 오차값 리스트에 추가 self.errors.append(self.R[x,y] - prediction) #예측값 리스트와 오차값 리스트를 numpy array형태로 변환 self.predictions = np.array(self.predictions) self.errors = np.array(self.errors) #error를 활용해서 RMSE 도출 return np.sqrt(np.mean(self.errors**2)) def sgd(self): for i,j,r in self.samples: #사용자 i 아이템 j에 대한 평점 예측치 계산 prediction = self.get_prediction(i,j) # 실제 평점과 비교한 오차 계산 e = (r-prediction) # 사용자 평가 경향 계산 및 업데이트 self.b_u[i] += self.alpha *(e - (self.beta * self.b_u[i])) # 아이템 평가 경향 계산 및 업데이트 self.b_d[j] += self.alpha *(e - (self.beta * self.b_d[j])) # P 행렬 계산 및 업데이트 self.P[i,:] += self.alpha * ((e * self.Q[j,:]) - (self.beta * self.P[i,:])) # Q 행렬 계산 및 업데이트 self.Q[j,:] += self.alpha * ((e * self.P[i,:]) - (self.beta * self.Q[j,:])) def get_prediction(self,i,j):#평점 예측값 구하는 함수 #전체 평점 + 사용자 평가 경향 + 아이템에 대한 평가 경향 + i번쨰 사용자의 요인과 j번째 아이템 요인의 행렬 곱 prediction = self.b + self.b_u[i] + self.b_d[j] + self.P[i,:].dot(self.Q[j,].T) return prediction # Test Set 선정 def set_test(self,ratings_test): test_set = [] for i in range(len(ratings_test)): x = self.user_id_index[ratings_test.iloc[i,0]] #사용자 id y = self.item_id_index[ratings_test.iloc[i,1]] #영화 id z = ratings_test.iloc[i,2] #실제 평점 test_set.append([x,y,z]) self.R[x,y] = 0 #안해주면 전체 데이터에 대한 트레이닝이 이루어짐 self.test_set = test_set return test_set # Test Set RMSE 계산 def test_rmse(self): error = 0 for one_set in self.test_set: predicted = self.get_prediction(one_set[0],one_set[1]) #사용자 ID, 영화 ID error += pow(one_set[2] - predicted,2) return np.sqrt(error/len(self.test_set)) def test(self): self.P = np.random.normal(scale=1./self.K, size=(self.num_users,self.K)) self.Q = np.random.normal(scale=1./self.K, size=(self.num_items,self.K)) self.b_u = np.zeros(self.num_users) self.b_d = np.zeros(self.num_items) self.b = np.mean(self.R[self.R.nonzero()]) #테스트셋에서 0으로 처리하여서 트레이닝 셋만 #트레이닝 셋에 대해서 데이터셋 구성 rows, columns = self.R.nonzero() self.samples = [(i,j,self.R[i,j]) for i,j in zip(rows,columns)] training_process = [] for i in range(self.iterations): np.random.shuffle(self.samples) self.sgd() rmse1 = self.rmse() rmse2 = self.test_rmse() training_process.append((i+1,rmse1,rmse2)) if self.verbose: if (i+1) % 10 == 0 : print('Iteration : %d ; Train RMSE = %.4f ; Test RMSE = %.4f'% (i+1,rmse1,rmse2)) return training_process def get_one_prediction(self,user_id,item_id): return self.get_prediction(self.user_id_index[user_id], self.item_id_index[item_id]) def full_prediction(self): return self.b + self.b_u[:,np.newaxis] + self.b_d[np.newaxis,:] + self.P.dot(self.Q.T) R_temp = ratings.pivot(index='user_id', columns='movie_id', values='rating').fillna(0) hyper_params = { 'K' : 30, 'alpha' : 0.001, 'beta' : 0.02, 'iterations' : 100, 'verbose' : True } mf = NEW_MF(R_temp, hyper_params) test_set = mf.set_test(ratings_test) result = mf.test() 1:1 문의하기를 이용해주세요.