- Windows 10 x64
- python 3.5
- math
- pandas
- numpy
- json
- functools
- random
- generate_data 为算法生成的文件夹
- Item_W.txt 是ICF模型生成的物品相关性数据
- User_W.txt 是UCF模型生成的用户相关性数据
- rank_u.txt 是对用户相关的用户进行排序数据
- train_data.txt 是划分数据集的训练数据
- original_data 为源文件
- ratings_data.txt 是原下载的数据集(内涵用户和物品以及对物品评价)
- trust.txt 是原下载的数据集(内涵用户和用户之间置信度)
- flask_test.py 是flask api接口开发
- ICF+UCF.py 是生成模型文件,同时也是整个搭建模型的过程(函数式编程)
- package_API.py 是封装了模型类,也包含了模型的所有过程(面向对象),
- Collaborative_Filter() 提供完整接口,并且包含建模的所有过程
- one_user_recommend() 提供对于输入一个用户id,输出推荐物品id的类,供给flask测试
- read_me.md 是模型构建和文件的解释说明
####(1)方式一:随机在原数据集上进行抽取,以80%作为训练集,20%作为测试集 思考:这种方式是在原数据集(维度:user_id,item_id,values)上直接进行抽取数据,但是这种方式会存在 可能在测试集上有一个user_id1对应其所有的items,导致在训练集上没有该user_id1,也就是在推荐系统中根本 对user_id1没有任何数据,因此这样划分存在问题。
思考: 这种方式能够解决在推荐系统中不会存在上面方式的问题。
- 步骤:
- 找到和目标用户兴趣相似的用户集合(通过original_data/trust_data.txt过滤掉一些用户置信度为0的在用户相关性中)。
- 找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户。
- 计算用户之间的相似度
- 物品排序具体公式如下:
- 减少热门物品对用户相似度的影响
公式:
- 由于在做UCF的时候存在一个问题:就是在做用户相似度的时候,存在某些用户和所有的用户的交集都是空, 也就是无法给他通过用户进行推荐,此时就只能用过ICF进行推荐,只要该用户存在过购买记录的,那么就可以 通过item-item进行推荐。
- precision = 3.33%
- recall = 13.9%
- f1_score = 5.38%
- coverage = 33..19%
无论是准确率还是召回率都和之前做的模型不太一样,原因是每一个样本(用户)需要推荐多个物品,而真实结果也是多个物品。 在评价模型好坏的时候就必须综合所有的样本集合来看。并且TP取的是R(u)和T(u)的交集求和(所有用户的),而准确率的分母是 所有推荐的物品,召回率的分母是所有真实的物品。