Linux文件系统与日志分析

【C语言初阶笔记】C语言基础知识概括(超详细)

  返回  

推荐系统——保留用户次数大于n的交互

2021/8/20 22:15:37 浏览:

推荐系统——保留用户次数大于n的交互

  • 这里以RecBole库下recbole.data.dataset.dataset._filter_by_inter_num为例。

准备数据

import numpy as np
import pandas as pd
his_inter = np.array([['王','王','王','李','张','张','张','雷'],['肖申克的救赎','美丽人生','这个杀手不太冷','色戒','肖申克的救赎','美丽人生','这个杀手不太冷','肖申克的救赎']]).T
df_test = pd.DataFrame(his_inter,columns=['user_id','item_id'])

在这里插入图片描述

设置参数

max_user_inter_num = 3 #用户最大交互个数
min_user_inter_num = 2 #用户最小
max_item_inter_num = 2 #项目最大
min_item_inter_num = 1 #项目最小

操作

  1. 返回用户和项目历史分别交互的个数
from collections import Counter
user_inter_num = Counter(df_test['user_id'].values)
# Counter({'张': 3, '李': 1, '王': 3, '雷': 1})
item_inter_num = Counter(df_test['item_id'].values)
# Counter({'美丽人生': 2, '肖申克的救赎': 3, '色戒': 1, '这个杀手不太冷': 2})
  1. 找到不符合规定交互的索引
def _get_illegal_ids_by_inter_num(df, field, max_num=None, min_num=None):
"""
此函数用于返回不符合交互限制的用户/项目的索引
"""
  # 返回用户/项目历史交互过的次数
  inter_num = Counter(df[field].values)
  # 返回不符合的用户/项目索引
  ids = {id_ for id_ in inter_num if inter_num[id_] < min_num or inter_num[id_] > max_num}
  return ids

# 调用上面定义的函数  
ban_users = _get_illegal_ids_by_inter_num(df_test, field='user_id',
                           max_num = max_user_inter_num,
                           min_num = min_user_inter_num)
ban_items = _get_illegal_ids_by_inter_num(df_test, field='item_id',
                           max_num = max_item_inter_num,
                           min_num = min_item_inter_num)

具体查看ban_users

ban_users
#{'张', '王'}
ban_items
#{'肖申克的救赎'}
  1. 删掉不符合规定的交互
  • 这里需要注意,为什么要用|=,这个符号在这里插入图片描述
    只要其中一个为True,则结果为True。这里首先第一个if,使得dropped_inter中不符合用户交互的索引为True,第二个if,使得不符合项目交互的索引为True。使用 |= 可以使第一个if中为True的索引位置经过第二个if的运算还是为True。
dropped_inter = pd.Series(False, index=df_test.index)
if 'user_id':
    dropped_inter |= df_test['user_id'].isin(ban_users) #只要有一个是True,则为True。
if 'item_id':
    dropped_inter |= df_test['item_id'].isin(ban_items)

df_test.drop(df_test.index[dropped_inter], inplace=True)

在这里插入图片描述

  • 结果
    在这里插入图片描述

联系我们

如果您对我们的服务有兴趣,请及时和我们联系!

服务热线:18288888888
座机:18288888888
传真:
邮箱:888888@qq.com
地址:郑州市文化路红专路93号