为了账号安全,请及时绑定邮箱和手机立即绑定

P值计算好像不太对

老师你好,感谢分享!有个小问题:

ICF中最后P值计算,是指与J最相似的K个物品,和用户U操作过的物品的交集,把他们的s求和。这个应该要遍历所有物品吧?

但是视频代码中,取用户操作过的前3个物品,再取它最相似的K个物品,似乎不太符合

https://img1.sycdn.imooc.com//5c0f34080001447d05360176.jpg

我重写了下,老师你看有问题么,非常感谢!

def cal_recom_result_2(sim_info,user_click):
    """
    recom by item collaboritive filter
    Args:
        sim_info:item sim dict
        user_click:user click dict
    Return:
        dict,key:userid value dict, value_key itemid,value_value recome_score
    """
    topk = 5
    recom_info = {}
    for user in user_click:
        click_list = user_click[user]
        recom_info.setdefault(user,{})
        for itemid_i,sim_item in sim_info.items():
            for itemid_j,sim_score in sim_item[:topk]:
                if itemid_j not in click_list:
                    continue
                recom_info[user].setdefault(itemid_j,0)
                recom_info[user][itemid_j] += sim_score
    return recom_info


正在回答

4 回答

您好,取了top几个物品是由于有时效性,推荐过程中,我们不可能把用户去年操作过的物品也拿过来做itemcf。因为随着时间推移。可能早已经不喜欢之前的物品了。所以召回过程中考虑到这一点。谢谢。

0 回复 有任何疑惑可以回复我~
#1

朱思利 提问者

感谢老师!刚没考虑时效问题。 假如考虑时效后,比如取最新3个物品u1、u2、u3,按算法应该是遍历全部物品j,然后计算j与u1、u2、u3的相似度,再求和,再按和的大小排序,推荐最高的 核心疑问就是:p值公式是一个求和公式,我们计算时好像没有求和
2018-12-11 回复 有任何疑惑可以回复我~
#2

慕少0472972 回复 朱思利 提问者

确实是,老师这里写的确实没有求和
2019-01-03 回复 有任何疑惑可以回复我~
#3

慕莱坞9201401 回复 朱思利 提问者

公式中规定的是与j最相似的k个物品,老师代码中好像当成了与i最相似的k个物品
2019-01-25 回复 有任何疑惑可以回复我~
for user_id, item_list in user_click:
    recom_result.setdefault(user_id, {})
    for itemi, sim_dict in sim_info:
        for itemj, val in sim_info[itemi][:k]:
            if itemj not in item_list[:recent_click_num]:
                continue
            recom_result[user_id].setdefault(itemi, 0)
            recom_result[user_id][itemi] = val

上面那个不对,应该是这个

0 回复 有任何疑惑可以回复我~
recent_click_num = 3
k = 3
for user_id, item_set in user_click.items():
    recom_result.setdefault(user_id, {})        
    for item_id1 in item_set[:recent_click_num]:
        if item_id1 not in sim_info:
            continue
        for item_id2, val in sim_info[item_id1]:
            if item_id1 not in sim_info[item_id2][:k]:
                continue
            recom_result[user_id].setdefault(item_id2, 0)
            recom_result[user_id][item_id2] = val
return recom_result


0 回复 有任何疑惑可以回复我~
倒数第二句代码应该是recom_info[user][itemid_i] += sim_score,不是 itemid_j


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

P值计算好像不太对

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信