Mahout 에 있는 CF의 피어슨 상관계수 계산이 이상하고...
또, 사용자 기반 CF의 M/R 설명은 없는 듯 해서...
직접 구현하려고 찾다가 본 정보
여기 보면, 꽤 자세히 설명이 나와 있고,
또 중간에 보면..피어슨 상관 계수 계산 수식 링크가 있는데...
http://davidmlane.com/hyperstat/A51911.html
일반적으로 평균을 이용해서 계산하면, 데이터 두번 스캔(O(n2))이 필요한데..
이건, 한번 스캔(O(n))으로 끝난다...(멘붕..ㅡㅡ;..여태까지 왜 이걸 몰랐는지..)
여튼, 이 사이트에서 아이디어를 얻어서...피어슨 상관 계수를 M/R로 구현중.....
사실상, 피어슨 상관 계수만 구해지면,...CF의 M/R 구현은 끝났다고 봐도 되는거지..ㅎㅎ..
(앞에 포스팅한, CF M/R 예제 설명은...이해하기가 넘 힘들다...)
(그래서, 피어슨 상관계수를 M/R로 직접 해보기로..결정..ㅡㅡ;..)
(수학에 대한 얕은 지식과 무지한 해석능력에 대해 뼈저린 아픔을..ㅡㅡ;..)
문제는....과연, 효율적..즉, 빠를 것인가 하는 문제...
로직은...
로우 파일 = (사용자, 아이템, 점수) 일때,
=> 아이템을 키로, (사용자:점수) 리스트로 변환
=> (사용자-i, 사용자-j)를 키로, (공유 아이템에 대한 사용자-i의 점수, 사용자-j의 점수)를 밸류로 분해
=> (사용자-i, 사용자-j)를 키로, 리스트 모아서 계산하면, 끝
** 참고로, M/R 사용자 정의 writable을 쓸 경우....comparable 클래스를 같이 만들어야만 한다....
아니면, writable 클래스에, hash 및 compare 함수 등을 추가 해 주거나....
(어쩐지..너무 간단하게 된다 했는데..ㅎㅎ...한참 해맸음..)
Reduce의 output으로만 사용될 경우는 상관 없으나
Map의 output/Reduce의 input의 key로 쓰기 위함이라면...compare 가 필요해서 그렇단다..
'개발 및 연구 정보' 카테고리의 다른 글
IntelliJ 에서 SVN 프로젝트 설정 (0) | 2014.04.18 |
---|---|
인지과학의 역할 (0) | 2013.02.05 |
Collaborative Filtering in Map/Reduce (0) | 2012.10.18 |
Mahout를 이용한 기계학습 프로그래밍 (0) | 2012.10.15 |
Hadoop M/R 프로그래밍을 위한 설정 (0) | 2012.10.09 |