集体智慧编程第二三章学习总结

集体智慧编程第二三章笔记

协同过滤

  • 1 基于用户的协同过滤:比如为userX推荐电影,那么就要找到数据集中和userX相似的用户(看他们共同看过的电影的评分情况,用皮尔逊相关系数等算法求相似度),并根据相似度排名,再在userX没有看过的电影中,看看与他相似的user是怎么评价的,评价值*相似度再求和/总的相似度,就是预测的userX对这部电影的喜爱程度
  • 2 基于物品的协同过滤:应用场景,当我们在豆瓣只看过一部看过电影《泰囧》并且认为评分还不错(此时网站还没有收集用户足够多的信息,无法用基于用户的协同过滤推荐),下次登陆豆瓣的时候会推荐《港囧》,这里使用的方法就是基于物品的协同过滤。假如有很多很多电影,我们找到很多人的观看记录和评价记录。比如电影《港囧》我们需要计算它和另外一些电影的相似度,比如《泰囧》,那么我们就在数据库中查看同时看了这两部电影的人给出的分数如何,比如user1-100给《港囧》评分v1 = [4 5 3 5 …];给《泰囧》评分v2 = [3 4 4 3…];那么求v1 v2的皮尔逊相关系数,就是《港囧》和《泰囧》的相似度。当我们发现在很多很多电影中《港囧》和《泰囧》最相似,那么我们就将它推荐给喜欢《泰囧》的人。嗯,的确《港囧》很好看。

ps:也就是说,当我需要给写一个豆瓣电影写一个推荐系统,那么只要爬取到豆瓣上的电影,以及豆瓣用户对电影的评分(为了算法有效运行,需要尽量多的电影和用户数据),然后就能搞出一个简单但是完整的推荐系统

聚类

  • 1 分级聚类:似乎没什么好讲的,最为相似的群组两两合并,知道最后只剩下一个群组。因为是两两合并,可以用二叉树表示最后的合并结果。
  • 2 K-Means:原理就不讲了。
  • 3 以二维形式展示数据: 通常我们计算每对数据之间的距离,都是对它的特征进行距离或者相似度的计算,但是特征往往是高维的比如1000维等,这时候如何在二维平面上表达出数据之间的距离关系呢?这就需要我们将数据投影到二维坐标上再进行距离处理。
  • 3.1 怎么做呢?首先计算出所有项之间的目标距离(多维情况下),然后将所有数据项随机放置在二维图上。所有数据项两两之间的当前距离都是根据实际距离(欧式距离)计算得到的。针对亮亮构成的一对数据,我们将计算他们的误差值:=(实际距离 - 目标距离)/目标距离。然后根据cos theta 算出这个误差值在x方向和y方向上的分量(误差值分别 * (在二维平面上x的差)/实际距离 或者 (在二维平面上y的差)/实际距离)得到x 和 y方向的移动距离dx,dy,但是不能直接移动,还要乘以一个rat(例如rate=0.01)后,才能真的移动这个点。在计算dx,dy时候可以累计计算数据项1和其他所有数据项的累计移动距离,相当于求一个合力,然后再移动。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值