<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