原博文一些说明:
1、程序为py3()
2、题外话
17年那会刚学了python及协同过滤,边先做了个最简单的测试程序,没考虑效率等问题,核心是:实现算法即可。后来做了一些优化、以及ubcf、ibcf、slope-one等相关算法的程序,但由于多种原因一直未能整理更新,近期也不会更吧。。。
3、当时的整个思路:
3.1 写个.py文件:
将rating数据随机分成了training和test;
因为通常需要五折交叉试验,所以没运行一次都可以生成不同的(train,test)数据集
3.2 关于该class CF的进一步说明
里面其实已经很多注解了,特别要注意每个函数传入传出的数据格式。
否则肯定是跑不起来的
-
D:/d/201709train.txt及test的数据格式和rating的数据格式一样
-
formatRate函数将train、test转化 userDict或者itemDict
-
即每个人看了哪些电影及评分
{userid1:[(movieId1,rating),movieId2,rating),...] userid2:[(movieId1,rating),movieId2,rating),...] . . }
-
itemDict的格式也是类似,只是key是movieId
-
之所以转化成itemDict和MoveDict是因为后续运算过程中在进行相关运算时直接进行读取就可以
(self.train_data, self.test_data) = (ratings[0], ratings[1]) # [UserID::MovieID::Rating::Timestamp] #传个class的数据是嵌套列表 [ [UserID::MovieID::Rating::Timestamp] [UserID::MovieID::Rating::Timestamp] ... ]
-
formatuserDict函数就是依次把目标用户和other用户的数据转成向量,读取的是userDict;数据格式是
[ [目标用户评分,other用户评分] [0.2, 1], [0, 0.4], [0.2, 0] ... ]
3.3 start3函数的调用顺序
-
读入原始数据(movies和ratings),传给demo
-
计算准确率、召回率:demo.getPrecision() 其内部调用
- 调用getRecommand,处理train和test数据,返回推荐列表、共同评分用户集
- 计算precision和recall
-
简单方法计算预测评分:foreCast
计算Mae值:cal_Mae方法
4、最后
- 先补充这些吧,
- 很感谢那些联系我的伙伴吗。另外,很抱歉,没能给你们更多的帮助
- 一个是python,一个是算法本身,一个是数据。如果没有比较了解,一些疑问我真的不知该怎么回答。
作者:akufire
本文由博客一文多发平台 OpenWrite 发布!