2012-12-11 4 views
1

10M Movielens 데이터 세트를 사용하여 아이템 기반의 추천 된 작업을 시도했습니다. 모든 것이 잘 작동합니다. 내 질문은 사용자를위한 권장 사항을 확인하는 동안 권장 항목 목록에 이미 사용자가 평가 한 항목이 있음을 확인했습니다. 더 구체적으로는 다음과 같습니다.Apache Mahout Distributed Recommender 이미 등급이 매겨진 항목을 추천합니다

userid : 4를 가진 사용자가 [123,543,234,567,324] ID를 가진 영화를 본 다음 권장 목록에서 다시 543 및 234가 있다고 가정 해 보겠습니다. 방금 알고리즘을 이해하기 위해 Mahout을 보았습니다. TopK 목록을 생성하기 전에 이미 등급이 매겨진 항목을 제거하는 코드 세그먼트를 찾을 수 없었습니다. 내가 놓친 것이 있습니까? 아니면 이미 등급이 매겨진 품목을 추천하는 것이 정상입니까?

정상적인 경우 후보 항목에서 해당 항목을 제거 할 수 있습니까?

PS : 내가 원하는 권고의 수는 100이며, 일부 사용자에 대한 필터링 한 후이 번호는 (30) 등을 사전에

감사로 감소하기 때문에 권장 사항이 생성 된 후 권고 필터링은, 내 경우에 대한 효율적이지 않습니다 .

답변

3

내가 처음 만든 이래로 코드가 많이 바뀌었고, RecommenderJob이 여러 개 있지만 처음에는 기존의 모든 벡터에 대한 최종 벡터 합계에 "(사용자, 항목, NaN)"튜플을 추가 한 단계가있었습니다. 사용자 - 항목 쌍. 이로 인해 합계가 이러한 모든 사용자 - 항목 쌍에 대해 NaN이되어 결과에서 제외 될 수있었습니다. 더 이상 거기에 없을 수도 있습니다.

+0

빠른 답장을 보내 주셔서 감사합니다. 나는 0.7 배포판 아래에서 org.apache.mahout.cf.taste.hadoop.item.RecommenderJob을 사용했다. 내가 언급 한 부분을 찾을 수 있는지 살펴볼 것입니다. 그렇지 않다면 나는 그 아이디어를 얻었다. – messe

1

저는 RecommenderJob의 저자 중 한 명입니다. 우리는 사용자가 이미 알고있는 항목이 아니라는 것을 명시 적으로 확인하는 단위 테스트를 가지고 있습니다. 이것이 실제로 발생하면 심각한 버그가됩니다. 이런 일이 일어나는 곳에서 입력 데이터의 예를 들려 줄 수 있습니까?

또한 recommenderjob의 소스 코드에서 https://cwiki.apache.org/confluence/display/MAHOUT/Mailing+Lists,+IRC+and+Archives

+0

안녕하세요, 늦게 답변드립니다. mahout 0.7에서 3 노드 hadoop 클러스터에서 각 사용자에 대해 100 개의 추천을 생성하기 위해 Movielens 10M 데이터 세트를 시도했습니다. "bin/mahout org.apache.mahout.cf.taste.hadoop.item.RecommenderJob - 입력 movieLensLogs - 출력 outputMovie - 사용자 파일 movieUsers.txt - 추천하지 않음 100 -s SIMILARITY_LOGLIKELIHOOD". 간단히 위와 같이 작업을 실행합니다. 이미 사용자가 이미 본 항목을 추천했는지 테스트했을 때 설명했듯이 일부 사용자는 이미 등급이 매겨진 항목을 권장합니다. 추천 상품이 많아서 좋을까요? (제 경우는 100입니다.) – messe

0

에서 코끼리 조련사의 메일 링리스트에이 토론을 이동하는 더 나은 것 :

addOption ("filterFile", "F", "파일이 포함 쉼표 분리 된 사용자 ID, 항목 ID 쌍. 항목을 " +"해당 사용자에 대한 권장 사항 (선택 사항)에서 제외하는 데 사용됩니다 (선택 사항). ", null);

이 파일을 recommenderjob에 보내면 문제를 해결할 수 있다고 생각합니다.

+0

네, 제 문제를 해결할 수 있습니다. 그러나 데이터가 너무 크기 때문에 동일한 입력 파일로 필터를 공급하는 것이고 모든 사용자 기록을 말하게됩니다. 일반적으로 필터가 필요하지 않습니다. 필터는 사용자가 추천 시스템에서 싫어하는 항목을 제거하는 것입니다. – messe