Spaces:
Sleeping
Sleeping
Commit
·
9c3c7e9
1
Parent(s):
b826d7a
return ease result and the score to be multiplied by cbf
Browse files- .gitignore +1 -0
- app.py +3 -1
- contentBased_model.py +16 -8
- 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,
|
|
|
|
|
|
|
|
|
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
|
92 |
|
93 |
_output_preds.append( [self.item_map[_id] for _id in indices] )
|
94 |
-
|
|
|
|
|
|
|
95 |
|
96 |
pred_df['predicted_items'] = _output_preds
|
97 |
-
pred_df['
|
98 |
|
99 |
-
escaped = [
|
100 |
-
|
101 |
-
]
|
102 |
|
103 |
-
return
|
|
|
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,
|
|
|
|
|
|
|
|
|
|
|
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 |
-
|
84 |
-
|
85 |
-
|
|
|
|
|
|
|
|
|
|
|
86 |
|
87 |
-
return
|
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")
|