推荐算法应用

推荐算法

我是下载了这两个库的内容

https://github.com/wubinzzu/NeuRec
https://github.com/microsoft/recommenders

我的数据集只有users和items!

第一次尝试MF和LightGCN

熟悉https://github.com/wubinzzu/NeuRec这个代码,我只有users和items的数据集,咨询过用这两个算法比较好,应该是LightGCN的效果好些。

项目目录
NeuRec项目目录

导入配置文件

NeuRec.properties和文件夹conf里面的文件是对应模型的配置文件是我们使用需要导入的配置文件。
用jupyter notebook打开tutorial.ipynb,已经写好了实现整个推荐流程的代码。

from util import Configurator
conf = Configurator("NeuRec.properties", default_section="hyperparameters")

它是调用了Configurator导入了配置参数。具体实现函数在文件夹util下的configurator.py。

class Configurator(object):
	# 类的初始化
	def __init__(self, config_file, default_section="default"):
	    if not os.path.isfile(config_file):
            raise FileNotFoundError("There is not config file named '%s'!" % config_file)
        # 这个获得就是NeuRec.properties的[default],以这个为开头是一个配置项   
        self._default_section = default_section
        # 读取命令行的信息 比如python main.py --batch_size=32就可以获取--batch_size=32 已验证
        self.cmd_arg = self._read_cmd_arg()
        # 读取配置文件的信息
        self.lib_arg = self._read_config_file(config_file)
        
        config_dir = self.lib_arg["config_dir"]
        model_name = self.lib_arg["recommender"]
        arg_file = os.path.join(config_dir, model_name+'.properties')
        self.alg_arg = self._read_config_file(arg_file)
	def _read_cmd_arg(self):
	def _read_config_file(self, filename):
	#Python __repr__()方法:显示属性
	def __repr__(self):
导入数据

使用data文件夹下面的dataset.py文件,主要是_load_data这个函数,首先先选择它的数据形式:UIRT,UI,UIR,UIT。splitter是选择它中间是什么分隔符,是空格还是’,‘等等。之后查看数据,如果是第一次处理数据集,应该是走到print(“split and save data…”)这里。

        if self._check_saved_data(splitter, ori_prefix, saved_prefix):
            print("load saved data...")
            # load saved data
            train_data = pd.read_csv(train_file, sep=sep, header=None, names=columns)
            print(len(train_data))
            test_data = pd.read_csv(test_file, sep=sep, header=None, names=columns)

            user_map = pd.read_csv(user_map_file, sep=sep, header=None, names=["user", "id"])
            item_map = pd.read_csv(item_map_file, sep=sep, header=None, names=["item", "id"])
            self.userids = {user: uid for user, uid in zip(user_map["user"], user_map["id"])}
            self.itemids = {item: iid for item, iid in zip(item_map["item"], item_map["id"])}
        else:  # split and save data
            print("split and save data...")
            by_time = config["by_time"] if file_format in {"UIRT", "UIT"} else False
            train_data, test_data = self._split_data(ori_prefix, saved_prefix, columns, by_time, config)

之后就是_split_data函数来处理数据集。
它把测试集和训练集的数据合并在一起,因为我的数据集只有user和item,unique_user = all_data[“user”].unique()得到user,去掉相同的user_id,这样可以得到我们有多少个用户。同理,可以得到我们有多少个物体。然后重映射,把user和item分别重映射
在这里插入图片描述
上图是举个例子。
把user_id换成重映射的。

        self.userids = pd.Series(data=range(len(unique_user)), index=unique_user).to_dict()
        train_data["user"] = train_data["user"].map(self.userids)

之后再创建user-item矩阵表,数据集没有ratings,就设置rating是1。

使用的算法

MF
LightGCN

下一次再写吧。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

骨子带刺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值