首页 > 其他 > 详细

Libimseti的用户推荐系统

时间:2016-02-19 17:18:06      阅读:179      评论:0      收藏:0      [点我收藏+]
<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>


Libimseti的用户推荐系统

原文:http://blog.csdn.net/u012965373/article/details/50698832

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!