Libimseti 사용자 추천 시스템

5148 단어
<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>

좋은 웹페이지 즐겨찾기