mahout学习之推荐算法

推荐的定义

推荐算法可以分为三大类,基于用户的,基于物品的和基于内容的,前两者均属于协同过滤的范畴,仅仅通过用户与物品之间的关系进行推荐,无需了解物品自身的属性。而几乎内容的推荐技术很有用,但是必须与特定领域相结合,比如推荐一本书就必须了解书的属性,作者,颜色,内容等等。但是这些知识无法转移到其他领域,比如基于内容的图书推荐就对推荐哪道菜比较好吃毫无用处。
所有mahout对基于内容的推荐涉及很少。

基于用户的推荐

算法

基于用户的推荐算法来源与对相似用户爱好的总结,一般过程如下:

for (用户u尚未表达偏好的) 每个物品i
    for(对i有偏好的)每个其他用户v
        计算u和v之间的相似度s
        按权重为s将v对i的偏好并入平均值
return 值最高的物品(按加权平均排序)

看上去挺简单,但是,每个物品都检查速度太慢,一般会先计算出一个最相似用户的领域,然后仅考虑这些用户评价过的物品。

for(每个其他用户w)
    计算用户u与用户w的相似度s
    按相似度排序后,将位置靠前的用户作为领域n
for(n中用户有偏好,而用户u无偏好的)每个物品i
    for(n中用户对i有偏好的)每个其他用户v
        计算用户u与v的相似度s
        按权重s将v对i的偏好计入平均值
return 值最高的物品

mahout的具体实现

根据以上算法,可以具体化为以下步骤:
1. 数据模型,由DataModel实现
2. 用户间的相似性度量,由UserSimilarity实现
3. 用户邻域的定义,由UserNeighborhood实现
4. 推荐引擎,由一个Recommender实现

一个具体的例子如下:

        //存储并计算提供计算所需的偏好,用户以及物品数据
        DataModel model =
                new FileDataModel(new File("D:\\mahoutData\\intro.csv"));
        //比较两个用户之间的相似度
        UserSimilarity similarity =
                new PearsonCorrelationSimilarity(model);
        //明确与给定用户最相似的一组用户
        UserNeighborhood neighborhood = new NearestNUserNeighborhood(2, similarity, model);
        //合并上述所有组件为用户推荐物品
        Recommender recommender = new GenericUserBasedRecommender(
                model, neighborhood, similarity);
        List<RecommendedItem> recommendations =
                recommender.recommend(1, 1);
        for
  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值