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

2020-11-22  本文已影响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是用字典方式保存的数据,可能用起来灵活性更好些。

上一篇下一篇

猜你喜欢

热点阅读