博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【甘道夫】通过Mahout构建推荐系统--通过IDRescorer扩展评分规则
阅读量:4283 次
发布时间:2019-05-27

本文共 2363 字,大约阅读时间需要 7 分钟。

通过Mahout构建推荐系统时,如果我们需要加入某些过滤规则(比如:item的创建时间在一年以内),则需要用到
IDRescorer
接口,该接口源码如下:

package org.apache.mahout.cf.taste.recommender;
/**
 * <p>
 * A {@link Rescorer} which operates on {@code long} primitive IDs, rather than arbitrary {@link Object}s.
 * This is provided since most uses of this interface in the framework take IDs (as {@code long}) as an
 * argument, and so this can be used to avoid unnecessary boxing/unboxing.
 * </p>
 */
public interface IDRescorer {
  
  /**
   * @param id
   *          ID of thing (user, item, etc.) to rescore
   * @param originalScore
   *          original score
   * @return modified score, or {@link Double#NaN} to indicate that this should be excluded entirely
   */
  double rescore(long id, double originalScore);
  
  /**
   * Returns {@code true} to exclude the given thing.
   *
   * @param id
   *          ID of thing (user, item, etc.) to rescore
   * @return {@code true} to exclude, {@code false} otherwise
   */
  boolean isFiltered(long id);
  
}

该接口规定了两个必须实现的方法:
1.rescore方法
功能:定义重新评分的逻辑。根据新的规则,为指定id的item重新评分。
返回:重评后的分数
输入参数:item的id,该item原来的评分
调用该方法的方法包括:
2.isFiltered
功能:定义过滤规则。判断指定id的item,根据新的规则,是否该排除在外,返回true就是该item应该排除在结果之外。
返回:true or false
输入参数:指定的id
调用该方法的方法包括:

无论是否需要根据特定规则过滤推荐结果,都必须先创建
org.apache.mahout.cf.taste.recommender.Recommender类的对象r,然后通过对象r来执行推荐方法获得针对特定id用户的推荐结果List。
当无需使用特定规则过滤推荐结果时,只需使用
Recommender对象的如下方法获得推荐结果
  /**
   * @param userID
   *          user for which recommendations are to be computed
   * @param howMany
   *          desired number of recommendations
   * @return {@link List} of recommended {@link RecommendedItem}s, ordered from most strongly recommend to
   *         least
   * @throws TasteException
   *           if an error occurs while accessing the {@link DataModel}
   */
  List<RecommendedItem> recommend(long userID, int howMany) throws TasteException;
当需要根据特定规则过滤推荐结果时,需使用
Recommender对象的如下方法获得推荐结果
  /**
   * @param userID
   *          user for which recommendations are to be computed
   * @param howMany
   *          desired number of recommendations
   * @param rescorer
   *          rescoring function to apply before final list of recommendations is determined
   * @return {@link List} of recommended {@link RecommendedItem}s, ordered from most strongly recommend to
   *         least
   * @throws TasteException
   *           if an error occurs while accessing the {@link DataModel}
   */
  List<RecommendedItem> recommend(long userID, int howMany, IDRescorer rescorer) throws TasteException;
其中,最后一个参数就是本文开始提到的
IDRescorer。
所以,当需要通过特定规则过滤推荐结果时,需先实现IDRescorer接口,定义评分逻辑和排除规则。
你可能感兴趣的文章
android 相關網址
查看>>
動態開關android log level
查看>>
how to mount /system as read/write in android?
查看>>
Android 線上的opengrok
查看>>
Android 好的文章網誌
查看>>
vim 常用指令
查看>>
Glib相關
查看>>
Android的权限机制之—— “沙箱”机制sharedUserId和签名
查看>>
Android探索之旅 | AIDL原理和实例讲解
查看>>
devmem ioremap
查看>>
gpg 金鑰管理
查看>>
put file from local to remote server
查看>>
java學習
查看>>
c11新書
查看>>
語言編碼
查看>>
GNOME frontend for the rdesktop client (從ubuntu遠端桌面windows)
查看>>
安裝Ubuntu DHCP Server
查看>>
where does ansroid.os.SystemProperties store its key/values?
查看>>
設定Android Studio 去看AOSP code
查看>>
apk获得Android系统权限的方法(轉載)
查看>>