1

mahout에 주어진 권장 사항 항목을 사용하여 부울 기본 설정을 사용하여 데이터 집합의 정밀도와 회수율을 계산하려고합니다. 내가 GenericBooleanPrefItemBasedRecommender 및Mahout의 부울 기본 설정을 사용하는 아이템 기반 권장 장치의 정확도 및 회수

평가 (RecommenderBuilder recommenderBuilder, DataModelBuilder dataModelBuilder, DataModel이 데이터 모델, IDRescorer의 rescorer에서 INT, 더블 relevanceThreshold, 더블 evaluationPercentage)를 사용하고

는 TasteException을 던졌습니다; 나는 동일한 코드를 여러 번 실행하면 부울 환경 설정이 있기 때문에, 사용자에 대한 "관련"또는 "좋은"영화의 세트가 평가하는 모든 것들 `

1.

는 항상 제공 정확도와 리콜의 동일한 가치와 항상 서로 동일합니다. 왜? RandomUtils.useTestSeed()를 사용하고 있지 않습니다. 데이터를 교육 및 테스트 세트로 나누는 방법은 무엇입니까?

가능성 :
는) 무작위로 시작되는 시점 또는 무작위 테스트 세트에 관련 영화의 고정 비율을두고 각 사용자에 대한 테스트 및 교육에 설정 한 전체 데이터를 분할 : :이 비율을 결정 않는 방법이 있기 때문에 사용자가 매개 변수로 입력 할 수있는 장소가 없습니다. 코드를 실행할 때마다 P와 R의 동일한 값을 얻는 이유는 무엇이며 왜 P에서 n과 R의 값이 같은지?
b) 각 사용자에 대해 교육 세트에 모든 관련 영화를 넣습니다. 그러면 권장 사항을 작성할 정보가 남지 않으므로 사용자가 사용할 수 없습니다.

n에서 P와 R의 값이 같기 때문에, 각 사용자에 대해 관련 영화의 수는 추천 = n의 횟수마다 테스트 세트로 이동된다는 것을 의미합니다. 테스트 세트에 포함 된 관련 영화가 무작위이면 코드를 실행할 때마다 P와 R의 동일한 값을 얻는 이유는 무엇입니까?

내가 생각할 수있는 유일한 설명은 추천자가 다음과 같이 n에서 P와 R을 계산한다는 것입니다. 각 사용자별로 하나씩 테스트 세트에 관련 영화를 무작위로 배치합니다. 프로세스는 임의의 관련 영화를 구분할 수 없기 때문에 무작위로 진행되어야하지만 프로세스가 고정되어 있으며 코드를 실행할 때마다 각 사용자별로 동일한 관련 영화를 선택합니다. 그런 다음 n 권장 사항을 만들고 n에서 P와 R을 계산합니다.

결과는 다음과 같습니다.
1) 교육 및 테스트 세트의 개념은 백분율로 정의되지 않으므로 일반적인 정의와 일치하지 않습니다.
2) P와 R은 항상 서로 같아서 두 개가 아닌 한 개의 측정 항목 만 얻습니다.
3) 'n'영화를 무작위로 선택하는 과정은 매번 동일합니다.

편집 : 나는 내 질문에 대한 답을 찾을 수 CASE IN MY FULL 코드를 추가 AM :

공공 정적 무효 메인 (문자열 []에 인수하는) 예외를 throw {

FileDataModel model = new FileDataModel(new File("data/test.csv")); 
RecommenderIRStatsEvaluator evaluator = new GenericRecommenderIRStatsEvaluator(); 
RecommenderBuilder recommenderBuilder = new RecommenderBuilder() { 
@Override 
public Recommender buildRecommender(DataModel model) { 
ItemSimilarity similarity = new LogLikelihoodSimilarity(model); 
return new GenericBooleanPrefItemBasedRecommender(model, similarity); 
} 
}; 

IRStatistics stats = evaluator.evaluate(
recommenderBuilder, null, model, null, 5, 
GenericRecommenderIRStatsEvaluator.CHOOSE_THRESHOLD,1.0); 

System.out.println(stats.getPrecision()); 
System.out.println(stats.getRecall()); 
} 
+0

Welcome to Stackoverflow. [포맷 도움말] (http://stackoverflow.com/help/formatting)을보고 _code formatting_ 및 _simple lists_ 등을 사용해보십시오. 귀하의 게시물에 대한 또 다른 문제점은 너무 광범위하고 하나 이상의 질문을 포함하거나 주요 질문이 분명하지 않다는 것입니다. 더 구체적으로 말하십시오. – user1251007

답변

0

돈 ' 확실히 알지만, 사용할 때마다 동일한 값을 가진 난수 생성기를 시드하면 반환되는 숫자의 시퀀스는 동일하게됩니다.rng에 시스템 시간과 같은 것을 넣을 수있는 방법이 있는지 확인하십시오. 그냥 추측.

0

체크 아웃 관련 질문에 대한 내 대답 : How mahout's recommendation evaluator works

나는 이것이 당신이 평가는 관련 항목을 선택하는 방법, 작동하고, 정밀 및 호출이 어떻게 계산하는 방법을 이해하는 데 도움이 될 것입니다 생각합니다.

+0

내 질문을 게시하기 전에 귀하의 답변을 보았습니다. 실제 사용자 등급으로 사례를 설명하는 데 매우 유용합니다. 내 질문은 부울 환경 설정의 경우 각 항목이 단순한 경우 (userId, ItemId)이며, 이는 useId가 itemId를 좋아한다는 것을 의미합니다. 따라서 모든 임계 값 (<= 1)에 대해 각 사용자에 대해 관련 영화 세트는 자신이 등급 한 모든 영화와 동일합니다 (pref = 1). 이들 모두가 테스트 세트로 이동하면 해당 사용자가 트레이닝을 통해 추천 한 데이터가 남아 있지 않습니다. 또한 Precision의 가치가 Recall의 가치와 동일한 이유는 설명하지 않습니다. –

+1

23 페이지의 Mahout in Action 책에서 2.4.2 절은 다음과 같이 말합니다 :'환경 설정이 불리언이고 선호 값이없는 경우 문제는 더욱 복잡해집니다. 좋은 상품의 하위 집합을 선택하는 상대적인 선호도에 대한 개념조차 존재하지 않는다. 테스트가 할 수있는 최선의 방법은 무작위로 좋은 항목을 무작위로 선택하는 것입니다. ' –

+0

프로세스가 임의적이면 관련성이 높은 동영상 세트를 선택하여 코드를 실행할 때마다 변경해서는 안되며 매번 P의 값이 달라집니다. 코드를 실행합니다. 그런 다음 코드를 여러 번 실행하고 값을 평균하여 신뢰할 수있는 숫자를 얻습니다. 또한 사용자가 백분율을 입력하지 않아 무작위로 선택하는 기본 항목 수를 어떻게 결정합니까? n (추천 수)과 같지 않은 이유는 P = R입니까? –