251029更新
This commit is contained in:
parent
c46f53e2f9
commit
190083cfd0
25
推荐系统/main.py
25
推荐系统/main.py
|
|
@ -29,7 +29,7 @@ class InitializationArguments(BaseModel):
|
||||||
|
|
||||||
# 时间窗口(单位为天),平衡实时性和运算效率
|
# 时间窗口(单位为天),平衡实时性和运算效率
|
||||||
time_window: int = Field(default=30, ge=5, le=360)
|
time_window: int = Field(default=30, ge=5, le=360)
|
||||||
# 衰减因子兰布达系数,控制兴趣分数衰减速率
|
# 衰减因子兰布达系数,控制兴趣分数衰减速率(默认不衰减)
|
||||||
decay_lambda: float = Field(default=0, ge=0.00, le=10)
|
decay_lambda: float = Field(default=0, ge=0.00, le=10)
|
||||||
# 用户特征向量维度数
|
# 用户特征向量维度数
|
||||||
attributes_dimensions: int = Field(default=10, ge=2.00, le=200)
|
attributes_dimensions: int = Field(default=10, ge=2.00, le=200)
|
||||||
|
|
@ -210,9 +210,9 @@ class RecommenderSystem:
|
||||||
# 根据行为类型获取兴趣基础分数和衰减权重
|
# 根据行为类型获取兴趣基础分数和衰减权重
|
||||||
score_base, weight = self.behavior_arguments[type_]
|
score_base, weight = self.behavior_arguments[type_]
|
||||||
|
|
||||||
# 若行为类型为评分则将基础分数转化为0.2~0.8
|
# 若行为类型为评分则将评分转为基础分数(基于最小值-最大值归一化为0.2~1.0)
|
||||||
if type_ == "rating":
|
if type_ == "rating":
|
||||||
score_base = 0.1 + 0.8 * (1 / (1 + numpy.exp(3 - rating)))
|
score_base = 0.2 * (rating - 1) + 0.2
|
||||||
|
|
||||||
return score_base * numpy.exp(0 - time_interval * (self.decay_lambda * weight))
|
return score_base * numpy.exp(0 - time_interval * (self.decay_lambda * weight))
|
||||||
|
|
||||||
|
|
@ -259,8 +259,6 @@ class RecommenderSystem:
|
||||||
# 基于物品的协同过滤生成推荐物品标识列表
|
# 基于物品的协同过滤生成推荐物品标识列表
|
||||||
candidates_items = self._generate_items_candidates(user=user, k=k)
|
candidates_items = self._generate_items_candidates(user=user, k=k)
|
||||||
|
|
||||||
print(candidates_items)
|
|
||||||
|
|
||||||
# 基于用户的协同过滤生成推荐物品标识列表
|
# 基于用户的协同过滤生成推荐物品标识列表
|
||||||
candidates_users = self._generate_users_candidates(user=user, k=k)
|
candidates_users = self._generate_users_candidates(user=user, k=k)
|
||||||
|
|
||||||
|
|
@ -327,18 +325,17 @@ class RecommenderSystem:
|
||||||
else 0
|
else 0
|
||||||
)
|
)
|
||||||
|
|
||||||
# 流行度抑制因子
|
print(pair, similarity)
|
||||||
popularity_suppressed = len(
|
|
||||||
list(set(users_heuristic) & set(users_recall))
|
|
||||||
) / numpy.sqrt(len(users_heuristic) * len(users_recall))
|
|
||||||
|
|
||||||
# 加权物品的相似度
|
# 加权物品的相似度
|
||||||
items_recall[item_recall]["scores"] += (
|
items_recall[item_recall]["scores"] += (
|
||||||
behaviors["scores"][item_heuristic]
|
behaviors["scores"][item_heuristic] * similarity
|
||||||
* similarity
|
|
||||||
* popularity_suppressed
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
print(items_recall)
|
||||||
|
|
||||||
|
exit()
|
||||||
|
|
||||||
return self._normalize_scores(items_recall=items_recall, k=k)
|
return self._normalize_scores(items_recall=items_recall, k=k)
|
||||||
|
|
||||||
# 基于用户协同过滤算法生成候选物品标识列表
|
# 基于用户协同过滤算法生成候选物品标识列表
|
||||||
|
|
@ -385,8 +382,6 @@ class RecommenderSystem:
|
||||||
# 候选物品标识列表
|
# 候选物品标识列表
|
||||||
candidates = defaultdict(float)
|
candidates = defaultdict(float)
|
||||||
|
|
||||||
print(items_recall)
|
|
||||||
|
|
||||||
if items_recall:
|
if items_recall:
|
||||||
scores = [value["scores"] for value in items_recall.values()]
|
scores = [value["scores"] for value in items_recall.values()]
|
||||||
|
|
||||||
|
|
@ -428,7 +423,7 @@ if __name__ == "__main__":
|
||||||
"user": "aaaaaa",
|
"user": "aaaaaa",
|
||||||
"item": "111111",
|
"item": "111111",
|
||||||
"type_": "rating",
|
"type_": "rating",
|
||||||
"timestamp": int(time.time() - 3600),
|
"timestamp": int(time.time() - 3200),
|
||||||
"rating": 4,
|
"rating": 4,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue