我正在努力实现具有“特殊”功能的推荐算法,我想对Apache Mahout提供的基本算法执行这种小型自定义。
这些是我正在遵循的步骤(* =非基本步骤):
DataModel userModel = new GenericDataModel(userItemPreference);
UserSimilarity euclideanDistanceUserSimilarity = new EuclideanDistanceSimilarity(userModel);
UserNeighborhood e_n_neighborhood = new NearestNUserNeighborhood(20, euclideanDistanceUserSimilarity, userModel);
similarity*=weight
)(*)应该很简单,但我不明白为什么要建立一个推荐者,Mahout需要userModel,邻居和distanceSimilarity再次)...所以我无法确定我需要修改哪个对象并传递给构造函数(新邻居)。
UserBasedRecommender t_recommender =
new GenericUserBasedRecommender(userModel, e_n_neighborhood,
euclideanDistanceUserSimilarity, null);
您是否有任何建议可以帮助我实施第5步和第7步(考虑到我刚才谈到的GenericUserBasedRecommender
问题)?
谢谢
答案 0 :(得分:0)
我想我能够解决问题,所以我会在这里解释一下我的解决方案......也许这对其他人有用。
正如我所说,我需要运行
UserBasedRecommender t_recommender =
new GenericUserBasedRecommender(userModel, e_n_neighborhood,
euclideanDistanceUserSimilarity, null);
但是,通过使用权重列表修改相似性,并限制用户集和邻域。
要实现这一点,一种方法是创建自己的GenericUserBasedRecommender
构造函数所期望的接口实现。
这些实施不需要计算任何指标或值,他们应该能够返回预期的元素。
因此,在应用权重并过滤用户列表后,主要内容如下:
创建一个新的userModel(就像现有的一样)只有感兴趣的用户,所有项目和所有分数
创建UserNeighborhood
仅执行
public long [] getUserNeighborhood(long userID)抛出TasteException;
这个类应该实现一个基本的邻居容器,并且这个方法应该返回任何用户的邻居的静态列表(静态,因为你已经拥有它,所以你可以简单地通过构造函数传递它并将它放在内存中)
创建UserSimilarity
仅执行
public double userSimilarity(long userID1,long userID2)抛出TasteException;
行为应该与上一个类相同(因此您可以使用初始UserSimilarity
中的值,还记得考虑重量)。