<span style="font-size:18px;">/*** * @author YangXin * @date 2016/2/19 * @info Libimseti的用户推荐系统 * 下列代码显示了一个推荐程序的实现,其中包含了前面所讲的基于用户的推荐引擎 */ package unitFive; import java.io.File; import java.io.IOException; import java.util.Collection; import java.util.List; import org.apache.mahout.cf.taste.common.Refreshable; import org.apache.mahout.cf.taste.common.TasteException; import org.apache.mahout.cf.taste.impl.common.FastIDSet; import org.apache.mahout.cf.taste.impl.model.file.FileDataModel; import org.apache.mahout.cf.taste.impl.neighborhood.NearestNUserNeighborhood; import org.apache.mahout.cf.taste.impl.similarity.EuclideanDistanceSimilarity; import org.apache.mahout.cf.taste.model.DataModel; import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood; import org.apache.mahout.cf.taste.recommender.IDRescorer; import org.apache.mahout.cf.taste.recommender.RecommendedItem; import org.apache.mahout.cf.taste.recommender.Recommender; import org.apache.mahout.cf.taste.similarity.UserSimilarity; public class LibimsetiRecommender implements Recommender { private final Recommender delegate; private final DataModel model; private final FastIDSet men; private final FastIDSet women; private final FastIDSet usersRateMoreMen; private final FastIDSet usersRateLessMen; //在生产环境下需要 public LibimsetiRecommender() throws TasteException, IOException{ this(new FileDataModel(readResourceToTempFile("E:\\mahout项目\\examples\\ratings.dat"))); } /*** * 此方法封装了如何将资源转换为加载的文件,此处未实现 * @param string * @return */ private static File readResourceToTempFile(String string) { // TODO Auto-generated method stub return null; } //在构建基于用户的推荐程序 public LibimsetiRecommender(DataModel model) throws TasteException, IOException { // TODO Auto-generated constructor stub UserSimilarity similarity = new EuclideanDistanceSimilarity(model); UserNeighborhood neighborhood = new NearestNUserNeighborhood(2, similarity, model); delegate = new GenericUserBasedRecommender(model, neighboehood, similarity); this.model = model; FastIDSet[] menWomen = GenderRescorer.parseMenWomen(readResourceToTempFile("E:\\mahout项目\\examples\\gender.dat")); men = menWomen[0]; women = menWomen[1]; usersRateMoreMen = new FastIDSet(50000); usersRateLessMen = new FastIDSet(50000); } //在所有推荐上使用 @Override public List<RecommendedItem> recommend(long userID, int howMany) throws TasteException { // TODO Auto-generated method stub IDRescorer rescorer = new GenderRescorer(men, women, userID, usersRateMoreMen, userRateLessMen, userID, model); return delegate.recommend(userID, howMany, rescorer); } @Override public List<RecommendedItem> recommend(long userID, int howMany, IDRescorer rescorer) throws TasteException { // TODO Auto-generated method stub return delegate.recommend(userID, howMany, rescorer); } @Override public float estimatePreference(long userID, long itemID) throws TasteException { // TODO Auto-generated method stub IDRescorer rescorer = new GenderRescorer(men, women, userID, usersRateMoreMen,usersRateLessMen, userID, model); return (float)rescorer.rescore(itemID, delegate.estimatePreference(userID, itemID)); } @Override public void setPreference(long userID, long itemID, float value) throws TasteException { // TODO Auto-generated method stub delegate.setPreference(userID, itemID, value); } @Override public void removePreference(long userID, long itemID) throws TasteException { // TODO Auto-generated method stub delegate.removePreference(userID, itemID); } @Override public DataModel getDataModel() { // TODO Auto-generated method stub return delegate.getDataModel(); } @Override public void refresh(Collection<Refreshable> alreadyRefreshed) { // TODO Auto-generated method stub delegate.refresh(alreadyRefreshed); } @Override public List<RecommendedItem> recommend(long userID, int howMang, boolean arg2) throws TasteException { // TODO Auto-generated method stub return null; } @Override public List<RecommendedItem> recommend(long arg0, int arg1, IDRescorer arg2, boolean arg3) throws TasteException { // TODO Auto-generated method stub return null; } @Override public void refresh(Collection<Refreshable> arg0) { // TODO Auto-generated method stub } @Override public List<RecommendedItem> recommend(long arg0, int arg1) throws TasteException { // TODO Auto-generated method stub return null; } @Override public List<RecommendedItem> recommend(long arg0, int arg1, boolean arg2) throws TasteException { // TODO Auto-generated method stub return null; } @Override public List<RecommendedItem> recommend(long arg0, int arg1, IDRescorer arg2) throws TasteException { // TODO Auto-generated method stub return null; } @Override public List<RecommendedItem> recommend(long arg0, int arg1, IDRescorer arg2, boolean arg3) throws TasteException { // TODO Auto-generated method stub return null; } } </span>
原文:http://blog.csdn.net/u012965373/article/details/50698832