Spaces:
Sleeping
Sleeping
Commit
·
48b0e4b
1
Parent(s):
b01c3d3
Done with hybridizing both EASE and CBF model
Browse files- app.py +7 -7
- contentBased_model.py +12 -5
- easeBased_model.py +14 -0
- func.py +7 -2
app.py
CHANGED
@@ -31,11 +31,12 @@ def games_recomm(preferences_id):
|
|
31 |
'is_recommended': pref_value
|
32 |
})
|
33 |
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
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 |
-
|
107 |
-
|
108 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
109 |
|
110 |
-
return
|
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 |
-
|
|
|
|
|
|
|
|
|
|
|
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/"
|