deppfellow commited on
Commit
48b0e4b
·
1 Parent(s): b01c3d3

Done with hybridizing both EASE and CBF model

Browse files
Files changed (4) hide show
  1. app.py +7 -7
  2. contentBased_model.py +12 -5
  3. easeBased_model.py +14 -0
  4. func.py +7 -2
app.py CHANGED
@@ -31,11 +31,12 @@ def games_recomm(preferences_id):
31
  'is_recommended': pref_value
32
  })
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
@@ -74,7 +75,6 @@ def spr_sidebar():
74
  # Home page. One of the page in Main Header
75
  def home_page():
76
  st.title("Steam Recommendation System")
77
- # st.session_state
78
 
79
  if "user_preferences" in st.session_state:
80
  ids_list = ids_to_titles(st.session_state["user_preferences"])
@@ -106,7 +106,7 @@ def result_page():
106
  st.error('Please input preferences titles and run "Get recommendation"')
107
  else:
108
  st.success(f'Top {len(st.session_state["rs"])}')
109
- st.session_state
110
 
111
  user_res = generate_res_gamebox(ids=st.session_state['rs'])
112
 
 
31
  'is_recommended': pref_value
32
  })
33
 
34
+ res_ease = ease_model(pred_df=pred_df, k=100)
35
+ res_cbf = cbf_model(pred_df=pred_df, k=100)
36
+ res = combine_hybrid_result(res_ease, res_cbf)
37
+
38
+ # st.write(res)
39
+
40
  if type(res) == ValueError:
41
  st.error("Recommendation failed. Please select with at least 3 games title.")
42
  st.session_state
 
75
  # Home page. One of the page in Main Header
76
  def home_page():
77
  st.title("Steam Recommendation System")
 
78
 
79
  if "user_preferences" in st.session_state:
80
  ids_list = ids_to_titles(st.session_state["user_preferences"])
 
106
  st.error('Please input preferences titles and run "Get recommendation"')
107
  else:
108
  st.success(f'Top {len(st.session_state["rs"])}')
109
+ # st.session_state
110
 
111
  user_res = generate_res_gamebox(ids=st.session_state['rs'])
112
 
contentBased_model.py CHANGED
@@ -103,12 +103,19 @@ class KnnCBF:
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")
 
103
  pred_df['predicted_items'] = _output_preds
104
  pred_df['predicted_score'] = _score_preds
105
 
106
+ escaped_id = [
107
+ ele for i_list in pred_df['predicted_items'].values for ele in i_list
108
+ ]
109
+ escaped_score = [
110
+ score for s_list in pred_df['predicted_score'].values for score in s_list
111
+ ]
112
+
113
+ pred_result = pd.DataFrame({
114
+ 'app_id' : escaped_id,
115
+ 'predicted_score' : escaped_score
116
+ })
117
 
118
+ return pred_result
 
119
 
120
  def cbf_model(pred_df, k=10):
121
  items = pd.read_csv("data/games_attributes.csv")
easeBased_model.py CHANGED
@@ -38,6 +38,16 @@ class EASE:
38
  "_index"] = dist_labels[col].astype("category").cat.codes
39
 
40
  return dist_labels
 
 
 
 
 
 
 
 
 
 
41
 
42
  def predict_active(self, pred_df,
43
  weight_mx,
@@ -71,6 +81,10 @@ class EASE:
71
  )
72
 
73
  _preds_act_tensor = user_act_tensor @ weight_mx
 
 
 
 
74
  if remove_owned:
75
  _preds_act_tensor += -1. * user_act_tensor
76
 
 
38
  "_index"] = dist_labels[col].astype("category").cat.codes
39
 
40
  return dist_labels
41
+
42
+ def scaling_score(preds_tensor):
43
+
44
+ work_tensor = preds_tensor
45
+ min_score = torch.min(preds_tensor)
46
+ max_score = torch.max(preds_tensor)
47
+
48
+ scaled = 10 * (work_tensor - min_score) / (max_score - min_score)
49
+
50
+ return scaled
51
 
52
  def predict_active(self, pred_df,
53
  weight_mx,
 
81
  )
82
 
83
  _preds_act_tensor = user_act_tensor @ weight_mx
84
+ _preds_act_tensor = 1 * \
85
+ (_preds_act_tensor - torch.min(_preds_act_tensor)) / \
86
+ (torch.max(_preds_act_tensor) - torch.min(_preds_act_tensor))
87
+
88
  if remove_owned:
89
  _preds_act_tensor += -1. * user_act_tensor
90
 
func.py CHANGED
@@ -55,8 +55,13 @@ def generate_res_gamebox(ids):
55
 
56
  st.divider()
57
 
58
- def combine_hybrid_result():
59
- pass
 
 
 
 
 
60
 
61
  # for title in titles_list:
62
  # # url = f"https://store.steampowered.com/app/"
 
55
 
56
  st.divider()
57
 
58
+ def combine_hybrid_result(res_ease, res_cbf):
59
+ df = pd.concat([res_ease, res_cbf], axis=0)
60
+ res_final = df.groupby("app_id").sum().sort_values(["predicted_score"], ascending=False)
61
+
62
+ predictions = res_final.head(10)
63
+
64
+ return predictions.index.tolist()
65
 
66
  # for title in titles_list:
67
  # # url = f"https://store.steampowered.com/app/"