新闻推荐-task01 baseline

DataWhale 新闻推荐学习
第一课,赛题理解与baseline
下面是阿里的天池比赛入口。
零基础入门推荐系统 - 新闻推荐
让代码跑起来的法门:
step 1, 如下图所示下载数据集到本地。在DataA1121.md 里面有数据下载的网络地址。直接复制到浏览器里面即可下载。
数据集下载
step2, 在本地Pycharm 里面新建Project. 然后再项目文件夹里面新建文件夹data_raw, temp_results 。 将第一步下载的数据集放到data_raw 文件夹下面。
在这里插入图片描述

在这里插入图片描述step3, 根据学习手册进行编写和测试了。

遇到的问题,
1、关于计算物品相似度的问题–协同过滤。 下面的代码中在计算相似度矩阵之后,对相似度矩阵进行了归一化。
Karypis在研究中发现如果将ItemCF的相似度矩阵按最大值归一化,可以提高推荐的准确度。其研究表明,如果已经得到了物品相似度矩阵w,那么可用如下公式得到归一化之后的相似度矩阵w’:
在这里插入图片描述

def itemcf_sim(df):
    """
        文章与文章之间的相似性矩阵计算
        :param df: 数据表
        :item_created_time_dict:  文章创建时间的字典
        return : 文章与文章的相似性矩阵
        思路: 基于物品的协同过滤(详细请参考上一期推荐系统基础的组队学习), 在多路召回部分会加上关联规则的召回策略
    """

    user_item_time_dict = get_user_item_time(df)

    # 计算物品相似度
    i2i_sim = {}
    item_cnt = defaultdict(int)
    for user, item_time_list in tqdm(user_item_time_dict.items()):
        # 在基于商品的协同过滤优化的时候可以考虑时间因素
        for i, i_click_time, device in item_time_list:
            item_cnt[i] += 1
            i2i_sim.setdefault(i, {})
            for j, j_click_time, device in item_time_list:
                if (i == j):
                    continue
                i2i_sim[i].setdefault(j, 0)

                i2i_sim[i][j] += 1 / math.log(len(item_time_list) + 1)

    i2i_sim_ = i2i_sim.copy()
    for i, related_items in i2i_sim.items():
        for j, wij in related_items.items():
            i2i_sim_[i][j] = wij / math.sqrt(item_cnt[i] * item_cnt[j])

    # 将得到的相似性矩阵保存到本地
 


    pickle.dump(i2i_sim_, open(save_path + 'itemcf_i2i_sim.pkl', 'wb'))

    return i2i_sim_

协同过滤分2步:
step1: 根据挑选出用户都喜欢的物品,然后根据物品进行反排序,统计物品的共同喜欢次数。这里基于一个常识就是,物品越受人喜欢,那么这个物品就越有共通性,即物品就应该有更好的相似性。 根据喜欢多少构建相似度矩阵。
在这里插入图片描述
step2, 根据相似矩阵,根据用户针对某项物品计算出与物品有相似特性的物品。即生成用户推荐列表。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值