Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
G
gm_mab
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
rank
gm_mab
Commits
0eccae37
Commit
0eccae37
authored
Apr 25, 2020
by
段英荣
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
调试
parent
806150f0
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
82 additions
and
79 deletions
+82
-79
Linucb.py
linucb/core/Linucb.py
+27
-25
generate_content_user_feature.py
tools/generate_content_user_feature.py
+55
-54
No files found.
linucb/core/Linucb.py
View file @
0eccae37
...
...
@@ -155,22 +155,22 @@ class LinUCB:
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
)
#
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"
:
ba
,
"ba"
:
np
.
zeros
((
cls
.
d
,
1
))
,
"AaI"
:
np
.
identity
(
cls
.
d
)
}
pickle_data
=
pickle
.
dumps
(
init_dict
)
...
...
@@ -199,6 +199,8 @@ class LinUCB:
r
=
cls
.
r1
*
6
elif
content_level_str
==
"3.5"
:
r
=
cls
.
r1
*
4
else
:
r
=
cls
.
r1
else
:
r
=
cls
.
r0
...
...
@@ -211,19 +213,19 @@ class LinUCB:
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
...
...
tools/generate_content_user_feature.py
View file @
0eccae37
...
...
@@ -225,58 +225,59 @@ 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_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
])
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_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
)
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
)
# 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]]
...
...
@@ -286,9 +287,9 @@ if __name__ == "__main__":
# 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]
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment