2014-06-24 4 views
0

저는 Mahout의 추천 효율성을 평가하기 위해 RecommenderEvaluator를 사용합니다. 현재 IDRescorer을 통해 권장 검색 결과를 향상 시키려고 노력하고 있습니다. IDRescorer은 검색된 항목에 대해 사후 처리를 향상시킵니다.Mahout RecommenderEvaluator with IDRescorer

RecommenderEvaluator evaluator = 
    new AverageAbsoluteDifferenceRecommenderEvaluator(); 
double evaluation = evaluator.evaluate(builder, myModel, 0.9, 0.9); 

Mahout에서 RecommenderEvaluator에게 내 맞춤 IDRescorer을 사용하도록 알리는 방법이 있습니까?

+0

@DraganMilcevski 답 주셔서 대단히 감사합니다. 내 'CustomRescorer'이 '새 CustomRescorer (requestParams : Seq [String])'과 같은 다른 매개 변수에 따라 달라 지므로 정확히 찾고있는 것이 아닙니다. 다른 모든 경우에는 귀하의 대답이 적합 할 수 있습니다. – cyrillk

+0

이 문제를 해결할 수있는 방법이 있습니다. Recommender 클래스에서 customRescorrer를 변수로 사용하고 새 값을 설정하여 새로 고칠 수도 있습니다. 그러면 권장 프로세스가 시작될 때 새 rescorer가 사용됩니다. 어쩌면 수업 전체를 보내면 내가 너를 도울지도 모른다. –

답변

1

당신은 추천이 rescorer없이 호출되는 경우에도 Recommender 클래스 다음

class CustomRecommender implements Recommender{ 
.... 
public List<RecommendedItem> recommend(long userID, int howMany) throws TasteException { 
IDRescorer rescorer = new CustomResorer(); 
return delegate.recommend(userID, howMany, rescorer); 
} 
public List<RecommendedItem> recommend(long userID, int howMany, IDRescorer rescorer) throws TasteException { 
    return delegate.recommend(userID, howMany, rescorer); 
} 
public float estimatePreference(long userID, long itemID) throws TasteException { 
    IDRescorer rescorer = new CustomResorer(); 
    return (float) rescorer.rescore(itemID, delegate.estimatePreference(userID, itemID)); 
} 
... 
} 

당신 자신의 구현을 만들 수 있습니다, 당신은이 recommendestimatePreference 방법에 통합 할 예정이다.

그리고 당신이 빌드 할 때 RecommenderBuilder 당신이 당신의 추천인의 인스턴스를 생성합니다 :

RecommenderBuilder recommenderBuilder = new RecommenderBuilder() { 
    @Override 
    public Recommender buildRecommender(DataModel model) throws TasteException { 
    Similarity similarity = new ...    
    return new CustomRecommender(model, similarity);      
    } 

};