美文网首页
1.2_python实现1.1中的用户偏好计算

1.2_python实现1.1中的用户偏好计算

作者: 蓝冻 | 来源:发表于2020-11-22 03:05 被阅读0次

    假设物品在各属性上的取值要么为 0,要么为 1。假设物品集的属性矩阵为 item_feature,并假设我们已基于用户评分矩阵得到了一个字典user_dict,该字典的键为各个用户,每个键的值也是一个字典,这个次级字典记录了该用户对他发生过行为的物品的评分。也就是说次级字典的键为各个物品,值为该用户对该物品的评分。由于通常单个用户所发生行为的物品的数量并不太多,所以次级字典里面的键的数目也不太多,这样计算量比较小。

    下面我们写个函数来计算用户偏好。

    def user_prefer(user_dict, item_feature):

            user_pre = {}    # 此处用字典格式来保存用户偏好

            for user in user_dict.keys():        # 遍历每一个用户

                    grade = user_dict[user].values()    # 取出该用户所有的评分

                    average = sum(grade) / len(grade)   # 求出了该用户打分的平均分

                    user_pre[user] = []        # 用一个list来保存该用户的属性系数

                    for feature in range(v):     # 遍历每一个属性,v是属性的数目

                            score = 0

                            k_feature = 0

                            for item in user_dict[user].keys():    # 遍历该用户发生行为的所有物品

                                    if  item_feature[int(item)][feature] == 1:

                                            score += (user_dict[user][item] - average)

                                             k_feature += 1

                            if k_feature  != 0:

                                    user_pre[user].append(score / k_feature)

                            else:

                                    user_pre[user].append(0.0)

            return user_pre

    注意:上面我们假设了item_feature中的各行对应于不同物品,并已将物品按顺序进行编号,属性从0到(v - 1)进行编号,如此才能应用  if  item_feature[int(item)][feature] == 1: 这样的表达。如果item_feature是用字典方式保存的数据,可能用起来灵活性更好些。

    相关文章

      网友评论

          本文标题:1.2_python实现1.1中的用户偏好计算

          本文链接:https://www.haomeiwen.com/subject/lafmiktx.html