mahout技术文档

原创
2016/02/29 16:54
阅读数 92
 //首先获得用户本人自己借过的所有书
 PreferenceArray preferencesFromUser = getDataModel().getPreferencesFromUser(userID);
 //以下获得读者借过的书,其他也借过那些书的,取那些读者借阅过的所有书,作为候选物品
  FastIDSet possibleItemsIDs = new FastIDSet();
    for (long itemID : preferredItemIDs) {
      PreferenceArray itemPreferences = dataModel.getPreferencesForItem(itemID);
      int numUsersPreferringItem = itemPreferences.length();
      for (int index = 0; index < numUsersPreferringItem; index++) {
        possibleItemsIDs.addAll(dataModel.getItemIDsFromUser(itemPreferences.getUserID(index)));
      }
    }
    possibleItemsIDs.removeAll(preferredItemIDs);
   //将所有的候选物品,与读者借阅过的每一本书,做相似度计算
    double[] similarities = getSimilarity().itemSimilarities(itemID, preferencesFromUser.getIDs());
    boolean foundAPref = false;
    double totalSimilarity = 0.0;
    for (double theSimilarity : similarities) {
      if (!Double.isNaN(theSimilarity)) {
        foundAPref = true;
        totalSimilarity += theSimilarity;
      }
    }
    return foundAPref ? (float) totalSimilarity : Float.NaN;
    //之后取相似度最高的10本书,返回
     List<RecommendedItem> topItems = TopItems.getTopItems(howMany, possibleItemIDs.iterator(), rescorer,
      estimator);


展开阅读全文
打赏
1
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
1
分享
返回顶部
顶部