分享

通过Mahout构建推荐系统--通过IDRescorer扩展评分规则

问题导读

1.IDRescorer接口规定了哪些个必须实现的方法?
2.如何定义过滤规则?









通过Mahout构建推荐系统时,如果我们需要加入某些过滤规则(比如:item的创建时间在一年以内),则需要用到IDRescorer接口,该接口源码如下:
  1. package org.apache.mahout.cf.taste.recommender;
  2. /**
  3. * <p>
  4. * A {@link Rescorer} which operates on {@code long} primitive IDs, rather than arbitrary {@link Object}s.
  5. * This is provided since most uses of this interface in the framework take IDs (as {@code long}) as an
  6. * argument, and so this can be used to avoid unnecessary boxing/unboxing.
  7. * </p>
  8. */
  9. public interface IDRescorer {
  10.   
  11.   /**
  12.    * @param id
  13.    *          ID of thing (user, item, etc.) to rescore
  14.    * @param originalScore
  15.    *          original score
  16.    * @return modified score, or {@link Double#NaN} to indicate that this should be excluded entirely
  17.    */
  18.   double rescore(long id, double originalScore);
  19.   
  20.   /**
  21.    * Returns {@code true} to exclude the given thing.
  22.    *
  23.    * @param id
  24.    *          ID of thing (user, item, etc.) to rescore
  25.    * @return {@code true} to exclude, {@code false} otherwise
  26.    */
  27.   boolean isFiltered(long id);
  28.   
  29. }
复制代码

该接口规定了两个必须实现的方法:

1.rescore方法
功能:定义重新评分的逻辑。根据新的规则,为指定id的item重新评分。
返回:重评后的分数
输入参数:item的id,该item原来的评分
调用该方法的方法包括:
file:///C:/Users/ADMINI~1/AppData/Local/Temp/Wiz/111206981.png
20140423155824671.png

2.isFiltered
功能:定义过滤规则。判断指定id的item,根据新的规则,是否该排除在外,返回true就是该item应该排除在结果之外。
返回:true or false
输入参数:指定的id
调用该方法的方法包括:
file:///C:/Users/ADMINI~1/AppData/Local/Temp/Wiz/111244609.png
20140423155837828.png

无论是否需要根据特定规则过滤推荐结果,都必须先创建org.apache.mahout.cf.taste.recommender.Recommender类的对象r,然后通过对象r来执行推荐方法获得针对特定id用户的推荐结果List。

当无需使用特定规则过滤推荐结果时,只需使用Recommender对象的如下方法获得推荐结果:

  1. /**
  2.    * @param userID
  3.    *          user for which recommendations are to be computed
  4.    * @param howMany
  5.    *          desired number of recommendations
  6.    * @return {@link List} of recommended {@link RecommendedItem}s, ordered from most strongly recommend to
  7.    *         least
  8.    * @throws TasteException
  9.    *           if an error occurs while accessing the {@link DataModel}
  10.    */
  11.   List<RecommendedItem> recommend(long userID, int howMany) throws TasteException;
复制代码

当需要根据特定规则过滤推荐结果时,需使用Recommender对象的如下方法获得推荐结果:
  1. /**
  2.    * @param userID
  3.    *          user for which recommendations are to be computed
  4.    * @param howMany
  5.    *          desired number of recommendations
  6.    * @param rescorer
  7.    *          rescoring function to apply before final list of recommendations is determined
  8.    * @return {@link List} of recommended {@link RecommendedItem}s, ordered from most strongly recommend to
  9.    *         least
  10.    * @throws TasteException
  11.    *           if an error occurs while accessing the {@link DataModel}
  12.    */
复制代码
其中,最后一个参数就是本文开始提到的IDRescorer。
所以,当需要通过特定规则过滤推荐结果时,需先实现IDRescorer接口,定义评分逻辑和排除规则。







本帖被以下淘专辑推荐:

欢迎加入about云群90371779322273151432264021 ,云计算爱好者群,亦可关注about云腾讯认证空间||关注本站微信

已有(4)人评论

跳转到指定楼层
Joker 发表于 2015-1-19 09:44:44
LZ有什么中文版的好书吗?最近也要用这个
回复

使用道具 举报

stark_summer 发表于 2015-1-19 10:22:55
回复

使用道具 举报

chinaboy2005 发表于 2015-1-22 22:24:53
回复

使用道具 举报

ssswift 发表于 2016-6-13 11:25:23
Good ,Thanks !
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条