deppfellow commited on
Commit
9c3c7e9
·
1 Parent(s): b826d7a

return ease result and the score to be multiplied by cbf

Browse files
Files changed (4) hide show
  1. .gitignore +1 -0
  2. app.py +3 -1
  3. contentBased_model.py +16 -8
  4. easeBased_model.py +22 -7
.gitignore ADDED
@@ -0,0 +1 @@
 
 
1
+ __pycache__
app.py CHANGED
@@ -33,7 +33,9 @@ def games_recomm(preferences_id):
33
 
34
  res = ease_model(pred_df=pred_df, k=10)
35
  # res = cbf_model(pred_df=pred_df, k=10)
36
-
 
 
37
  if type(res) == ValueError:
38
  st.error("Recommendation failed. Please select with at least 3 games title.")
39
  st.session_state
 
33
 
34
  res = ease_model(pred_df=pred_df, k=10)
35
  # res = cbf_model(pred_df=pred_df, k=10)
36
+
37
+ # st.write(res[['predicted_items', 'predicted_score']])
38
+ st.write(res)
39
  if type(res) == ValueError:
40
  st.error("Recommendation failed. Please select with at least 3 games title.")
41
  st.session_state
contentBased_model.py CHANGED
@@ -57,7 +57,11 @@ class KnnCBF:
57
 
58
  return classifier.kneighbors(test)
59
 
60
- def predict_active(self, pred_df, k=10, remove_owned=True):
 
 
 
 
61
  act_df = pred_df.merge(self.item_lookup, on=[self.item_col], sort=False)
62
  # active_user = pred_df['user_id'].unique()
63
  pred_df = pred_df[[self.user_col]].drop_duplicates()
@@ -88,19 +92,23 @@ class KnnCBF:
88
 
89
  top_tensor = torch.from_numpy(result).topk(k)
90
  indices = top_tensor.indices.tolist()
91
- score = top_tensor.values.tolist()
92
 
93
  _output_preds.append( [self.item_map[_id] for _id in indices] )
94
- _score_preds.append( score )
 
 
 
95
 
96
  pred_df['predicted_items'] = _output_preds
97
- pred_df['relevance_score'] = _score_preds
98
 
99
- escaped = [
100
- ele for i_list in pred_df['predicted_items'].values for ele in i_list
101
- ]
102
 
103
- return escaped
 
104
 
105
  def cbf_model(pred_df, k=10):
106
  items = pd.read_csv("data/games_attributes.csv")
 
57
 
58
  return classifier.kneighbors(test)
59
 
60
+ def predict_active(self, pred_df,
61
+ k=10,
62
+ weight_hybrid=.3,
63
+ hybrid_model=True):
64
+
65
  act_df = pred_df.merge(self.item_lookup, on=[self.item_col], sort=False)
66
  # active_user = pred_df['user_id'].unique()
67
  pred_df = pred_df[[self.user_col]].drop_duplicates()
 
92
 
93
  top_tensor = torch.from_numpy(result).topk(k)
94
  indices = top_tensor.indices.tolist()
95
+ score = top_tensor.values
96
 
97
  _output_preds.append( [self.item_map[_id] for _id in indices] )
98
+ if hybrid_model:
99
+ score = score * weight_hybrid
100
+
101
+ _score_preds.append( score.tolist() )
102
 
103
  pred_df['predicted_items'] = _output_preds
104
+ pred_df['predicted_score'] = _score_preds
105
 
106
+ # escaped = [
107
+ # ele for i_list in pred_df['predicted_items'].values for ele in i_list
108
+ # ]
109
 
110
+ return pred_df
111
+ # return escaped
112
 
113
  def cbf_model(pred_df, k=10):
114
  items = pd.read_csv("data/games_attributes.csv")
easeBased_model.py CHANGED
@@ -39,7 +39,12 @@ class EASE:
39
 
40
  return dist_labels
41
 
42
- def predict_active(self, pred_df, weight_mx, k=10, remove_owned=True):
 
 
 
 
 
43
  """
44
  Args:
45
  pred_df: (DataFrame) data of user interactions
@@ -69,22 +74,32 @@ class EASE:
69
  if remove_owned:
70
  _preds_act_tensor += -1. * user_act_tensor
71
 
 
 
 
72
  output_preds = []
73
  score_preds = []
74
  for _preds in _preds_act_tensor:
75
  top_items = _preds.topk(k)
76
 
77
- output_preds.append([self.item_map[id] for id in top_items.indices.tolist()])
78
  score_preds.append( top_items.values.tolist() )
79
-
 
 
80
  pred_df['predicted_items'] = output_preds
81
  pred_df['predicted_score'] = score_preds
82
 
83
- escaped = [
84
- ele for i_list in pred_df['predicted_items'].values for ele in i_list
85
- ]
 
 
 
 
 
86
 
87
- return escaped
88
 
89
  def ease_model(pred_df, k=10):
90
  ease_B = torch.load("data/ease_B.pt")
 
39
 
40
  return dist_labels
41
 
42
+ def predict_active(self, pred_df,
43
+ weight_mx,
44
+ k=10,
45
+ weight_lambda=0.7,
46
+ hybrid_model=True,
47
+ remove_owned=True):
48
  """
49
  Args:
50
  pred_df: (DataFrame) data of user interactions
 
74
  if remove_owned:
75
  _preds_act_tensor += -1. * user_act_tensor
76
 
77
+ if hybrid_model:
78
+ _preds_act_tensor = _preds_act_tensor * weight_lambda
79
+
80
  output_preds = []
81
  score_preds = []
82
  for _preds in _preds_act_tensor:
83
  top_items = _preds.topk(k)
84
 
85
+ output_preds.append([self.item_map[id] for id in top_items.indices.tolist()])
86
  score_preds.append( top_items.values.tolist() )
87
+
88
+ print("'\nOutput preds:", output_preds)
89
+ print("Score preds:", score_preds)
90
  pred_df['predicted_items'] = output_preds
91
  pred_df['predicted_score'] = score_preds
92
 
93
+ escaped_id = [ele for i_list in pred_df['predicted_items'].values for ele in i_list]
94
+ escaped_score = [score for s_list in pred_df['predicted_score'].values for score in s_list]
95
+
96
+ pred_result = pd.DataFrame({
97
+ 'app_id' : escaped_id,
98
+ 'predicted_score' : escaped_score
99
+ })
100
+ # print(pred_result)
101
 
102
+ return pred_result
103
 
104
  def ease_model(pred_df, k=10):
105
  ease_B = torch.load("data/ease_B.pt")