b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

slope one_daocloud_slope one 百度学术

电脑杂谈  发布时间:2017-01-30 21:02:01  来源:网络整理

slope one 百度学术_slope one_daocloud

用户推荐越来越热, Google使用MinHash, PLSI, LDA, SVD, SVM等算法,分析用户的喜好, 实现新闻的自动分类;新浪也用Slope One以及一些Item-based的算法对音乐进行推荐; 淘宝定期会启动MapReduce作业分析前一天或者一个月用户收藏的宝贝,给相同喜好的买家提供推荐服务。

本文要描述的Slope One算法是一种对评分进行预测的算法, 它相对于SVD, PLSI, LDA这一类model-based算法来说有以下特点:

1. 简单, 容易实现

2. 训练得到的模型可以增量更新

3. 预测速度很快

4. 用户可以只做过一两次评分,就可以获得推荐.

5. 准确度比较理想

okay, 找到一篇介绍算法的:

讲的不错,就不再重复了。

英文wiki上也有介绍

其中python的实现比较简洁

# Copyright 2006 Bryan O'Sullivan <[emailprotected]>.
#
# This software may be used and distributed according to the terms
# of the GNU General Public License, version 2 or later, which is
# incorporated herein by reference.

class SlopeOne(object):
 def __init__(self):
 self.diffs = {}
 self.freqs = {}

 def predict(self, userprefs):
 preds, freqs = {}, {}
 for item, rating in userprefs.iteritems():
 for diffitem, diffratings in self.diffs.iteritems():
try:
 freq = self.freqs[diffitem][item]
 except KeyError:
continue
 preds.setdefault(diffitem, 0.0)
 freqs.setdefault(diffitem, 0)
 preds[diffitem] += freq * (diffratings[item] + rating)
 freqs[diffitem] += freq
 return dict([(item, value / freqs[item])
 for item, value in preds.iteritems()
 if item not in userprefs and freqs[item] > 0])

 def update(self, userdata):
 for ratings in userdata.itervalues():
 for item1, rating1 in ratings.iteritems():
 self.freqs.setdefault(item1, {})
 self.diffs.setdefault(item1, {})
 for item2, rating2 in ratings.iteritems():
 self.freqs[item1].setdefault(item2, 0)
 self.diffs[item1].setdefault(item2, 0.0)
 self.freqs[item1][item2] += 1
 self.diffs[item1][item2] += rating1 - rating2
 print self.diffs[item1][item2]
 for item1, ratings in self.diffs.iteritems():
 for item2 in ratings:
 ratings[item2] /= self.freqs[item1][item2]

if __name__ == '__main__':
 userdata = dict(
alice=dict(squid=1.0,
cuttlefish=0.5,
octopus=0.2),
bob=dict(squid=1.0,
octopus=0.5,
nautilus=0.2),
carole=dict(squid=0.2,
octopus=1.0,
cuttlefish=0.4,
nautilus=0.4),
dave=dict(cuttlefish=0.9,
octopus=0.4,
nautilus=0.5),
)
 s = SlopeOne()
s.update(userdata)
 print s.predict(dict(octopus=0.4)


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-29635-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    每日福利
    热点图片
    拼命载入中...