继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

[原博文](py3实现协同过滤算法)一些说明

慕田峪5156792
关注TA
已关注
手记 3
粉丝 0
获赞 0

原博文一些说明:

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函数的调用顺序

  1. 读入原始数据(movies和ratings),传给demo

  2. 计算准确率、召回率:demo.getPrecision() 其内部调用

    • 调用getRecommand,处理train和test数据,返回推荐列表、共同评分用户集
    • 计算precision和recall
  3. 简单方法计算预测评分:foreCast

计算Mae值:cal_Mae方法

4、最后

  • 先补充这些吧,
  • 很感谢那些联系我的伙伴吗。另外,很抱歉,没能给你们更多的帮助
  • 一个是python,一个是算法本身,一个是数据。如果没有比较了解,一些疑问我真的不知该怎么回答。

作者:akufire
本文由博客一文多发平台 OpenWrite 发布!

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP