[t:/]$ 지식_

libfm 몇가지

2016/12/28

공홈
http://www.libfm.org/

매뉴얼
http://www.libfm.org/libfm-1.42.manual.pdf

깃허브
https://github.com/srendle/libfm

매트릭스 디콤포지션
https://en.wikipedia.org/wiki/Matrix_decomposition

MCMC란?
http://blog.daum.net/dataminer9/209

무비렌즈 데이터 받기
http://grouplens.org/datasets/movielens/

전치행렬
http://blog.naver.com/lcuh11/220428510832
전치행렬이 자주 등장하는 이유는 열방향 벡터로 표현된 행렬을 행방향으로 벡터로 전환하여 연산하는 경우가 많기 때문이다.

libsvm
이전에 더 많이 쓰던 매트릭스 팩토라이즈
http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/

xgboost
주목받는 추천기인듯
https://github.com/dmlc/xgboost/tree/master/demo/rank

xgboost 설명 슬라이드
http://www.slideshare.net/ShangxuanZhang/xgboost

캐글등 경연용 오픈소스 현황
http://www.slideshare.net/odsc/owen-zhangopen-sourcetoolsanddscompetitions1

LightGBM
https://github.com/Microsoft/LightGBM/tree/master/examples/lambdarank
MS에서 만들었다고 하며, 어썸하다고..

캐글 : 캐글 수련으로 도사가 된다음 원하는 곳에 취업하라는데 1도 모르겠다.
https://www.kaggle.com/competitions?sortBy=deadline&group=all&page=1&segment=allCategories

컨벡스 팩토라이제이션 머신
http://www.mblondel.org/publications/mblondel-ecmlpkdd2015.pdf
모르겠다..

libfm 테스트 결과들
http://arogozhnikov.github.io/2016/02/15/TestingLibFM.html
결론 : 파이썬 구현은 대용량에서 문제가 있다. 느리고, 죽는다. libFM이 fastFM보다 근소하게 결과도 속도도 좋다.

BPR / 베이지언 개인화 랭킹 알고리즘
https://arxiv.org/pdf/1205.2618.pdf

brp 깃허브
https://github.com/fabiopetroni/libfm_with_BPR

libFM with bpr 매뉴얼
http://www.fabiopetroni.com/Download/manual_libFM_with_BPR_extension.pdf

매트릭스 팩토라이제이션과 low rank matrix 등 공부 자료
http://sanghyukchun.github.io/73/

MF 추천기 현황이 가장 잘 나와있는 듯
http://www.slideshare.net/irecsys/matrix-factorization-in-recommender-systems

low rank 근사
http://nlp.stanford.edu/IR-book/html/htmledition/low-rank-approximations-1.html

머신러닝 앤드류 교수 코세라 강의 요약
https://wikidocs.net/7179

이정윤 박사와의 질답

이박사님 날쎄~ 질문좀 할께요 libfm 가지고 놀아보는 중이에요. 편의상 음슴체로 할께.

조건 : train과 test가 있고, item 10, user10이 있어요.

그룹 파일(-meta)에 대해 : 행렬에 user와 item이 구분없이 들어가는데 그룹파일로 구분지어주면 맞나요? BS extention에 대해 : train, test, group(meta) 패키지 일 뿐 다른 건 아닌가요?

test에 대해 : – 입력(train) 데이터가 5 – 0:1 1:2 (평점 – 사용자 번호 – 아이템 번호) 이렇게 들어갔어요 – test 데이터에 0 – 0:2 1:2 이렇게 넣으며 0으로 넣은 평점을 추정하여 출력 주는게 맞나요? – test 데이터에 1 – 0:2 1:2 이렇게 넣으면 내가 넣은 평점 1은 그냥 버려지는지 뭔가 의미하게 되는지.. 즉슨 train 셋트와 연산을 하여 새로운 train 컨텍스트를 만들어버리는 것인지..

– test 데이터에 train 데이터에 있는 사용자 정보를 그대로 넣어도 유사할 뿐 passthrough 되지는 않는 것 같은데 맞나요? 아마도 패쓰쓰루되면 알스퀘어 1이고 잔차 0인 완전 오버핏이라고 해석될 수도 있겠네..

추천기에 대해: 전체 아이템에 대해 추천을 시행해서 상위 10만 뽑는다 치면 test 데이터에 전체 아이템을 넣는 것이 맞나요?

증분(incremental) 방식 train은 불가능할까요? 예를 들어 train 된 상황에서 추가 데이터를 더 넣어서 기존 train 된 컨텍스트를 유지하며 데이터를 넣는 일.. 그리고 이 때 데이터가 추가됨에 따라 train 컨텍스트의 용량이 증가한다면 이것은 못 써먹을 것 같고 (메모리 넘쳐서) train 컨텍스트의 용량이 어느정도 수렴해 간다면 그냥 써도 될 것 같고.. 증분 방식이 아예 불가능하다면 증분 방식은 포기하는 것이 맞을 것 같고..

매번 도움 감사합니다. 동생님아~

해피 뉴이얼! REPLY Jeong-Yoon Lee says: 12-27-2016 at 17:23

  1. 그룹파일은 직접 안 써봐서 메뉴얼 외의 내용은 모르겠어요.
  2. 테스트에 대한 설명은 맞아요. 테스트 파일의 타겟값은 무시됩니다.
  3. 트레인에 있는 데이터를 그대로 테스트에 넣더라도 pass-through안하고 정상처리합니다 – MCMC, SGD, ALS 학습 방식 때문에 에러율이 0이 되지 않는 경우도 있지만 어찌되었건 예측성능은 overestimate되겠죠.
  4. 추천기에 대한 설명도 맞습니다. 다 넣어줘야해요.
  5. libFM은 모델을 따로 저장하지 않는 것으로 알고 있어요 (이 부분은 업데이트가 되었는지 모르겠네요). 훈련한 모델을 저장하는 경우에는 증분 방식으로 훈련할 수 있어요. 도움이 되셨길 바래요. 새해 복 많이 받으세요~! REPLY dawnsea says: 12-27-2016 at 17:29 와 많은 도움이 되었습니다! libfm 요즘 보니까 모델 저장 / 로드 기능이 추가되었네요. 그리고 fastFM은 특정 조건에서 libFM보다 신뢰도가 떨어진다는 그래프를 봤는데 출처를 까먹었네;;

그리고 libFM의 brp 익스텐션은 이미 멀티쓰레드를 지원하고 있어요. http://www.fabiopetroni.com/Download/manual_libFM_with_BPR_extension.pdf / brp은 베이지안 개인화 랭킹이라는데 논문은 이해못하겠고 -_-; 여튼 추천/랭킹에서 써먹을 수는 있는 듯..

http://arogozhnikov.github.io/2016/02/15/TestingLibFM.html 이건 libFM의 파이썬 구현은 대용량에서 느리고, 죽는다는 결론이 포함된 내용.

이박사도 새해 복 많이 받아요~!









[t:/] is not "technology - root". dawnsea, rss