slope-one算法.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
slope-one算法

简要概述Slope One 是一系列应用于协同过滤的算法的统称。由 Daniel Lemire和Anna Maclachlan于2005年发表的论文中提出。有争议的是,该算法堪称基于项目评价的non-trivial 协同过滤算法最简洁的形式。该系列算法的简洁特性使它们的实现简单而高效,而且其精确度与其它复杂费时的算法相比也不相上下。该系列算法也被用来改进其它算法Slope One 算法试图同时满足这样的的 5 个目标:1. 易于实现和维护:普通工程师可以轻松解释所有的聚合数据,并且算法易于实现和测试。 2. 运行时可更新的:新增一个评分项,应该对预测结果即时产生影响。 3. 高效率的查询响应:快速的执行查询,可能需要付出更多的空间占用作为代价。 4. 对初次访问者要求少:对于一个评分项目很少的用户,也应该可以获得有效的推荐。 5. 合理的准确性:与最准确的方法相比,此方法应该是有竞争力的,准确性方面的微小增长不能以简单性和扩展性的大量牺牲为代价。基本概念Slope One的基本概念很简单, 例子1, 用户X, Y和A都对Item1打了分. 同时用户X,Y还对Item2打了分, 用户A对Item2可能会打多少分呢?UserRating to Item 1Rating to Item 2X53Y43A4?根据SlopeOne算法, 应该是:4 - ((5-3) + (4-3))/2 = 2.5.?解释一下. 用户X对Item1的rating是5, 对Item2的rating是3, 那么他可能认为Item2应该比Item1少两分. 同时用户Y认为Item2应该比Item1少1分. 据此我们知道所有对Item1和Item2都打了分的用户认为Item2会比Item1平均少1.5分. 所以我们有理由推荐用户A可能会对Item2打(4-1.5)=2.5分;很简单是不是? 找到对Item1和Item2都打过分的用户, 算出rating差的平均值, 这样我们就能推测出对Item1打过分的用户A对Item2的可能Rating, 并据此向A用户推荐新项目.这里我们能看出Slope One算法的一个很大的优点, 在只有很少的数据时候也能得到一个相对准确的推荐, 这一点可以解决Cold Start的问题.加权算法接下来我们看看加权算法(Weighted Slope One). 如果有100个用户对Item1和Item2都打过分, 有1000个用户对Item3和Item2也打过分. 显然这两个rating差的权重是不一样的. 因此我们的计算方法是(100*(Rating 1 to 2) + 1000(Rating 3 to 2)) / (100 + 1000)代码实现using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace SlopeOne{ public class Rating { public float Value { get; set; } public int Freq { get; set; } public float AverageValue { get { return Value / Freq; } } } public class RatingDifferenceCollection : Dictionarystring, Rating { private string GetKey(int Item1Id, int Item2Id) { return (Item1Id Item2Id) ? Item1Id + / + Item2Id : Item2Id + / + Item1Id ; } public bool Contains(int Item1Id, int Item2Id) { return this.Keys.Containsstring(GetKey(Item1Id, Item2Id)); } public Rating this[int Item1Id, int Item2Id] { get { return this[this.GetKey(Item1Id, Item2Id)]; } set { t

文档评论(0)

haihang2017 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档