Commit 63506d6f authored by 段英荣's avatar 段英荣

调试

parent c7c581ee
......@@ -151,14 +151,26 @@ class LinUCB:
return False
@classmethod
def init_device_id_linucb_info(cls, redis_cli,redis_name_linucb_matrix, tag_list):
def init_device_id_linucb_info(cls, redis_cli,redis_name_linucb_matrix, tag_list,content_level_str):
try:
user_tag_linucb_dict = dict()
for tag_id in tag_list:
if content_level_str == "6":
baT = np.array([10.0,10.0])
elif content_level_str == "5":
baT = np.array([8.0, 8.0])
elif content_level_str == "4":
baT = np.array([6.0, 6.0])
elif content_level_str == "3.5":
baT = np.array([4.0, 4.0])
else:
baT = np.array([0.0, 0.0])
ba = np.transpose(baT)
init_dict = {
"Aa": np.identity(cls.d),
"theta": np.zeros((cls.d, 1)),
"ba": np.zeros((cls.d, 1)),
"ba": ba,
"AaI": np.identity(cls.d)
}
pickle_data = pickle.dumps(init_dict)
......@@ -190,32 +202,28 @@ class LinUCB:
else:
r = cls.r0
# if user_features_array:
# xaT = np.array(user_features_array)
# else:
# xaT = np.array([user_features])
xaT = np.array([user_features])
xa = np.transpose(xaT)
ori_redis_tag_data = redis_cli.hget(redis_name_linucb_matrix, content_id)
if not ori_redis_tag_data:
LinUCB.init_device_id_linucb_info(redis_client, redis_name_linucb_matrix,[content_id])
LinUCB.init_device_id_linucb_info(redis_client, redis_name_linucb_matrix,[content_id],content_level_str)
ori_redis_tag_data = redis_cli.hget(redis_name_linucb_matrix, content_id)
ori_redis_tag_dict = pickle.loads(ori_redis_tag_data)
new_Aa_matrix = ori_redis_tag_dict["Aa"] + np.dot(xa, xaT)
new_AaI_matrix = np.linalg.solve(new_Aa_matrix, np.identity(cls.d))
new_ba_matrix = ori_redis_tag_dict["ba"] + r*xa
user_tag_dict = {
"Aa": new_Aa_matrix,
"ba": new_ba_matrix,
"AaI": new_AaI_matrix,
"theta": np.dot(new_AaI_matrix, new_ba_matrix)
}
redis_cli.hset(redis_name_linucb_matrix, content_id, pickle.dumps(user_tag_dict))
# ori_redis_tag_dict = pickle.loads(ori_redis_tag_data)
# new_Aa_matrix = ori_redis_tag_dict["Aa"] + np.dot(xa, xaT)
# new_AaI_matrix = np.linalg.solve(new_Aa_matrix, np.identity(cls.d))
# new_ba_matrix = ori_redis_tag_dict["ba"] + r*xa
#
# user_tag_dict = {
# "Aa": new_Aa_matrix,
# "ba": new_ba_matrix,
# "AaI": new_AaI_matrix,
# "theta": np.dot(new_AaI_matrix, new_ba_matrix)
# }
#
# redis_cli.hset(redis_name_linucb_matrix, content_id, pickle.dumps(user_tag_dict))
else:
logging.warning("not standard linucb reward")
return True
......
......@@ -224,71 +224,71 @@ if __name__ == "__main__":
linucb_matrix_redis_name = "strategy:linucb:matrix:content_type:diary"
diary_click_file = "/data/log/duan_test/feed_query_data/feed_click_info.txt"
diary_fd = open(diary_click_file,"r")
diary_tag_label_num_dict = dict()
for line in diary_fd.readlines():
line = line.strip()
line = line.strip("\n")
line = line.strip("\r")
line = line.strip(" ")
item_list = line.split(",")
device_id = item_list[3]
diary_id = item_list[4]
# Generate_Feature_Info.generate_user_feature_to_redis(device_id, label_encoder,onehot_encoder)
user_feature_list = Generate_Feature_Info.get_user_feature_by_device_id(device_id)
content_feature_list = Generate_Feature_Info.get_content_feature(diary_id)
offi_context_feature_list = []
if len(user_feature_list)>0 and len(content_feature_list)>0:
offi_context_feature_list.append(user_feature_list[0])
offi_context_feature_list.append(content_feature_list[0])
diary_content_level = str(content_feature_list[1])
if content_feature_list[0] not in diary_tag_label_num_dict:
diary_tag_label_num_dict[content_feature_list[0]] = 0
diary_tag_label_num_dict[content_feature_list[0]] += 1
print(offi_context_feature_list)
print("*"*50)
LinUCB.update_linucb_info(user_features=offi_context_feature_list,reward=1,content_id=diary_id,
redis_name_linucb_matrix=linucb_matrix_redis_name,redis_cli=redis_client,
content_level_str=diary_content_level)
diary_tag_label_num_list = sorted(diary_tag_label_num_dict.items(),key=lambda item:item[1],reverse=True)
print(diary_tag_label_num_list)
diary_fd.close()
# device_id="868771031984211"
# # device_id="F0E142E6-EF98-482F-A470-34A6CE442D88"
# user_feature_list = Generate_Feature_Info.get_user_feature_by_device_id(device_id)
#
# diary_click_file = "/data/log/duan_test/feed_query_data/feed_click_info.txt"
# diary_fd = open(diary_click_file,"r")
#
# diary_tag_label_num_dict = dict()
# for line in diary_fd.readlines():
# line = line.strip()
# line = line.strip("\n")
# line = line.strip("\r")
# line = line.strip(" ")
#
# item_list = line.split(",")
# device_id = item_list[3]
# diary_id = item_list[4]
# # Generate_Feature_Info.generate_user_feature_to_redis(device_id, label_encoder,onehot_encoder)
#
# user_feature_list = Generate_Feature_Info.get_user_feature_by_device_id(device_id)
# content_feature_list = Generate_Feature_Info.get_content_feature(diary_id)
#
# offi_context_feature_list = []
# if len(user_feature_list)>0 and len(content_feature_list)>0:
# offi_context_feature_list.append(user_feature_list[0])
# offi_context_feature_list.append(content_feature_list[0])
# diary_content_level = str(content_feature_list[1])
#
# if content_feature_list[0] not in diary_tag_label_num_dict:
# diary_tag_label_num_dict[content_feature_list[0]] = 0
# diary_tag_label_num_dict[content_feature_list[0]] += 1
# test_count = 50
# while test_count:
# begin=time.time()
# test_feature = [user_feature_list[0],user_feature_list[0]]
# print(test_feature)
# all_diary_content_redis_dict = redis_client.hgetall("strategy:linucb:matrix:content_type:diary")
# top_tag_dict, top_tag_set = LinUCB.linucb_recommend_tag(all_diary_content_redis_dict,test_feature,list(all_diary_content_redis_dict.keys()))
# print(time.time()-begin)
# print(top_tag_dict)
#
# print(offi_context_feature_list)
# print("*"*50)
# LinUCB.update_linucb_info(user_features=offi_context_feature_list,reward=1,content_id=diary_id,
# redis_name_linucb_matrix=linucb_matrix_redis_name,redis_cli=redis_client,
# content_level_str=diary_content_level)
# for diary_id in top_tag_set:
# update_feature_list = [user_feature_list[0]]
# content_feature_list = Generate_Feature_Info.get_content_feature(diary_id)
# if len(content_feature_list)>0:
# update_feature_list.append(content_feature_list[0])
# print(update_feature_list)
# LinUCB.update_linucb_info(user_features=update_feature_list,reward=0,content_id=diary_id,redis_name_linucb_matrix=linucb_matrix_redis_name,redis_cli=redis_client)
#
# diary_tag_label_num_list = sorted(diary_tag_label_num_dict.items(),key=lambda item:item[1],reverse=True)
# print(diary_tag_label_num_list)
# diary_fd.close()
device_id="868771031984211"
# device_id="F0E142E6-EF98-482F-A470-34A6CE442D88"
user_feature_list = Generate_Feature_Info.get_user_feature_by_device_id(device_id)
test_count = 50
while test_count:
begin=time.time()
test_feature = [user_feature_list[0],user_feature_list[0]]
print(test_feature)
all_diary_content_redis_dict = redis_client.hgetall("strategy:linucb:matrix:content_type:diary")
top_tag_dict, top_tag_set = LinUCB.linucb_recommend_tag(all_diary_content_redis_dict,test_feature,list(all_diary_content_redis_dict.keys()))
print(time.time()-begin)
print(top_tag_dict)
for diary_id in top_tag_set:
update_feature_list = [user_feature_list[0]]
content_feature_list = Generate_Feature_Info.get_content_feature(diary_id)
if len(content_feature_list)>0:
update_feature_list.append(content_feature_list[0])
print(update_feature_list)
LinUCB.update_linucb_info(user_features=update_feature_list,reward=0,content_id=diary_id,redis_name_linucb_matrix=linucb_matrix_redis_name,redis_cli=redis_client)
test_count -= 1
print("*"*50)
time.sleep(2)
# test_count -= 1
# print("*"*50)
# time.sleep(2)
# begin=time.time()
# test_feature = [1,2]
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment