推荐系统最早在亚马逊的网站上应用,根据以往用户的购买行为,推荐出购买某种产品同时可能购买的其他产品,国内做的不错的当当网,有时候买书,它总能给我推荐出我感兴趣的其他书来,也算是技术极大的促进了销售。
一般的协同过滤算法,首先是收集用户对事物(产品)的评分情况,一种直接对某本书,或者某个歌曲打分,另种是隐性的打分,比如商务系统中,购买了表示打2分,浏览了打1分,其他的0分。我比较看好隐性打分,因为直接打分需要用户的参与程度比较高,很多网站都在内容页中留一个打分的按钮,从1~5选一个,我可能喜欢这篇文章,可我哪里知道我喜欢的程度是几分啊,还要我去思考,而网站设计中一条很重要的原则是:Do not let me think!,于是我就胡打一个分数或者不打,而隐性的打分则不同,只有你喜欢的图书你才会购买,只有你喜欢的歌曲才会听多次。
收集好用户的打分之后,通过最近邻搜索到和某个事物或者某个人特征或者兴趣相近的其他事物或者人,最近邻搜索算法一般是皮尔森相关系数(Person Correlation Coefficient)、余弦相似性(Cosine-based Similarity)以及调整余弦相似性(Adjusted Cosine Similarity)。关于余弦定理在数据挖掘中的应用,google黑白报有过介绍,可以参考数学之美 系列 12 - 余弦定理和新闻的分类。
剩下的工作就是根据最近邻集进行推荐了。
最近邻集的运算相对来说成本比较高,尤其是大量数据的时候,今天和大家分享的是一种简单高效的协同过滤算法:Slope one
基本原理
用户 |
对事物A打分 |
对事物B打分 |
X |
3 |
4 |
Y |
2 |
4 |
Z |
4 |
? |
用户Z对事物B的打分可能是多少呢?股票上有个说法是平均值可以掩盖一切异常波动,所以股票上的各个技术指标收拾不同时间段的平均值的曲线图或者柱状图等。同样的,Slope one算法也认为:平均值也可以代替某两个未知个体之间的打分差异,事物A对事物B的平均很差是:((3 - 4) + (2 - 4)) / 2 = -1.5,也就是说人们对事物B的打分一般比事物A的打分要高1.5,于是Slope one算法就猜测Z对事物B的打分是4 + 1.5 = 5.5
是不是非常的简单?
加权算法
有n个人对事物A和事物B打分了,R(A->B)表示这n个人对A和对B打分的平均差(A-B),有m个人对事物B和事物C打分了,R(B->C)表示这m个人对B和对C打分的平均差(B-C),注意都是平均差而不是平方差,现在某个用户对A的打分是ra,对C的打分是rc,那么A对B的打分可能是:
rb = (n * (ra - R(A->B)) + m * (rb + R(B->C)))/(m+n)
开源的Slope one的程序包
还有一些其他语言的版本,请参考http://en.wikipedia.org/wiki/Slope_One,即将面世的,居于PHP & Mysql的Slope one算法实现将会在http://code.google.com/p/openslopeone/开源出来,主要优化的是海量数据以及分布式处理,目前在我的笔记本上(迅驰+1.5G内存),对440W打分记录进行测试,单一线程,3小时47分处理完。速度还算是不错了,最近工作实在太忙了,等我整理好会开源出来放在上面的地址。过几天会有一篇我的算法的详细介绍,盼诸位批评指正,共同学习,共同进步。
本文来自:http://chaoqun.17348.com/2008/09/slope_one/
相关阅读:
Slope One 算法
Slope One:简单高效的协同过滤算法(Collaborative Filtering)
Slope One算法的C#实现
分享到:
相关推荐
在大数据和个性化推荐系统领域,SlopeOne算法是一种简单而有效的预测方法,尤其适用于处理大规模数据集。它由Daniel Lemire等人在2005年提出,旨在通过用户对物品的评分差异进行预测,以实现精准的推荐。在Ruby编程...
加权SlopeOne算法是协同过滤推荐系统中的一种优化策略,旨在解决原始SlopeOne算法在处理大规模数据集时存在的问题。协同过滤是推荐系统中最常见的技术之一,它基于用户的历史行为来预测他们可能对未评价物品的兴趣。...
在压缩包中的slopeone.py文件很可能是实现这一算法的核心代码。 3. **Python编程**:整个推荐系统模块用Python语言编写,这表明源码具有良好的可读性和可扩展性。Python作为数据科学和机器学习领域广泛使用的语言,...
在描述中提到的博文链接虽然缺失,但通常这类博客会详细介绍SlopeOne算法的原理,以及如何将其与大数据技术结合。 首先,让我们详细了解一下Slope One算法。它主要包括两个步骤:预处理(Preprocessing)和预测...
class SlopeOne { private $ratings; public function __construct($data) { // 初始化评分矩阵 $this->ratings = $data; } public function predict($userId, $itemId) { // 计算斜率和预测评分的逻辑 } ...
【标题】和【描述】提及的研究集中在解决协同过滤算法中的数据稀疏性问题,通过融合Slope One算法和神经网络来提升推荐系统的性能。这里,我们详细探讨这一研究的背景、核心算法及其应用。 在现代信息化社会,推荐...
Slope One是一种简单而有效的预测算法,尤其适用于推荐系统中的协同过滤。该算法由Daniel Lemire、Ionut Ciucu和Frank M. Harrenstein在2006年提出,以其计算效率高、内存需求小的特点,在处理大规模数据集时表现...
SlopeOne算法是一种基于协同过滤的简单预测方法,主要用于推荐系统。它由Daniel Lemire在2005年提出,其核心思想是通过计算用户之间的相似度,来预测用户对未评分项目的评分。这种算法相对高效,适用于处理大规模...
Slope One算法简单易实现、查询效率高、准确性合理,并且能够支持在线查询和动态更新,因此它是现实世界系统的一个良好候选。 该算法的提出者是Daniel Lemire,Anna Maclachlan也参与了相关工作。文档描述了Slope ...
本项目提供了一些推荐算法的Java实现,包括slopeone、SVD(奇异值分解)以及基于物品邻接的SVD(ItemNeighborSVD)。下面我们将详细探讨这些算法及其在Java中的实现。 1. **slopeone**: - Slope One是一种简单的...
快速协同推荐算法,java实现。该系列算法的简洁特性使它们的实现简单而高效,而且其精确度与其它复杂费时的算法相比也不相上下。
【推荐系统:推荐算法模型之隐因子模型1】 推荐系统是现代互联网服务中不可或缺的一部分,它们通过分析用户的行为和偏好,为用户提供个性化的产品或服务建议。在这个领域中,隐因子模型(Latent Factor Model)是一...
在 `RecommenderTest` 类中,可以设置邻居数量(`NEIGHBORHOOD_NUM`)和推荐数量(`RECOMMENDER_NUM`),然后调用具体的推荐算法方法,如 `slopeOne(dataModel)` 来运行 Slope One 算法。 总的来说,Mahout 的推荐...
Taste 包含了多种推荐算法的实现,如基于用户的、基于物品的,还有SlopeOne算法等,同时提供扩展接口,允许开发者自定义推荐算法。 DataModel 是 Taste 中的一个关键组件,它负责存储用户喜好信息,可以是从数据库...
MySQL通过高效的缓存机制、查询优化器以及对硬件资源的有效利用,保证了在高负载情况下的稳定性和快速响应。它支持水平扩展(如通过分片、复制等技术)和垂直扩展(如增加硬件资源),以应对大规模数据存储和高并发...
然后,文章詳細介紹了协同过滤推荐算法的实现,包括 slopeone 算法的应用和实验流程的设计。在实验中,作者选择了一个具有代表性的开放数据源作为处理对象,並給出了預測的均方根誤差、实验的耗时和数据量等指标。 ...