SlideShare une entreprise Scribd logo
1  sur  20
Télécharger pour lire hors ligne
빅데이터
실전기술
IT가맹점개발팀
이태영
2014.12.23
Recommendation System
using Mahout
Mahout 설치
1) Mahout 0.9 다운로드
http://mahout.apache.org 접속 후 다운로드
2) 계정 홈 디렉토리로 mv
$ mv mahout-distribution-0.9.tar.gz ~
3) 압축을 풀고 mahout 심볼릭 링크를 생성
$ ln -s mahout-distribution-0.9 mahout
4) .bash_profile에 MAHOUT_HOME과 PATH 추가
1 # .bash_profile
2
3 # Get the aliases and functions
4 if [ -f ~/.bashrc ]; then
5 . ~/.bashrc
6 fi
7
8 # User specific environment and startup programs
9
10 export JAVA_HOME=$HOME/java
11 export HADOOP_HOME=$HOME/hadoop
12 export PYTHON_HOME=$HOME/python
13 export MAHOUT_HOME=$HOME/mahout
14
15 PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PYTHON_HOME/:$MAHOUT_HOME/bin
16
17 export PATH
협업 필터링 알고리즘
Collarborative filtering
1. User based – (첫째, 비슷한 사용자 찾음)
• 취향이 비슷한 유저 B가 어떤 아이템을 구매했는지 확인 후 B가 구매했던 상품으로 추천
2. Item based – (첫째, 비슷한 아이템 찾음)
• 내가 구매했던 상품들을 기반으로, 연관성이 있는 상품을 추천
User based Recommendation Item based Recommendation
유사도
Similarity
1. Euclidean Distance
• 두 객체 간의 선호도 거리를 계산하여, 작을 수록 비슷한 성향을 가짐
2. Cosine Similarity (=Pearson Similarity)
• 두 객체 간의 선호도를 벡터화 하여, 벡터 사이의 각도가 적을 수록 유사
3. Jaccard Similarity
• 두 객체 간의 요소들의 전체 요소들 중 교집합되는 요소가 차지하는 비중
Mahout
What is Mahout?
The Apache Mahout™ project's goal is to build a scalable machine learning library.
• Clustering (군집화)
• Classification (분류)
• Recommendation (추천 및 협업필터링)
• Pattern Mining (패턴 마이닝)
• Regression (회귀 분석)
• Evolutionary Algorithms (진화 알고리즘)
• Dimension reduction (차원 리덕션)
Mahout is made by JAVA
• We can use Mahout core libarary for java programming.
• NO HADOOP ONLY.
Mahout 프로그래밍
Recommendation
1. MovieLens 데이터 셋 ( http://grouplens.org/datasets/movielens )
• 10만개 / 1백만개 / 1천만개 별로 평가 데이터 셋 제공
• 미국 내 상영된 영화를 사용자들이 평가한 결과물 1997/9/19 ~ 1998/4/22간
• 미네소타 대학 컴퓨터과학 연구실에서 수집한 추천 알고리즘을 위한 학습데이터
다운로드(약 4.8MB)
2. SLF4J 라이브러리 (http://www.slf4j.org )
• mahout 라이브러리 호환성 필요
Mahout 프로그래밍
Recommendation
다운로드(약 4.3MB)
3. GUAVA 라이브러리 ( https://code.google.com/p/guava-libraries )
• mahout의 데이터 객체는 guava 라이브러리 의존
Mahout 프로그래밍
Recommendation
다운로드(약 4.3MB)
다운로드(약 2.2MB)
4. Apache commons Math 라이브러리 (http://commons.apache.org/proper/commons-math )
• 수치 계산용 라이브러리
Mahout 프로그래밍
Recommendation
다운로드(약 14.3MB)
 최종 라이브러리 리스트
• commons-math3-3.4.jar
• guava-18.0.jar
• mahout-core-0.9.jar
• mahout-integration-0.9.jar
• mahout-math-0.9.jar
• slf4j-api-1.7.7.jar
• slf4j-nop-1.7.7.jar
Mahout 프로그래밍
Recommendation
Mahout 프로그래밍
Item Based Recommendation
 프로젝트 생성
• ItemRecommender
• Java 5 SDK 이상
Mahout 프로그래밍
Item Based Recommendation
 프로젝트 개발 준비
• Libraries는 모두 lib 폴더 밑으로 복사
• ml-100k.zip(MovieLens 데이터)를 압축을 푼 뒤 data 폴더로 u.data를 복사
README 파일 내 설명
u.data -- The full u data set, 100000 ratings by 943 users
on 1682 items. Each user has rated at least 20 movies.
Users and items are numbered consecutively from 1. The
data is randomly ordered. This is a tab separated list of
user id | item id | rating | timestamp. The time stamps are
unix seconds since 1/1/1970 UTC
Mahout 프로그래밍
Recommendation
 프로젝트 개발 준비
• u.data 파일을 csv 파일 형태로 변경하여 movies.csv로 저장
• u.data 파일의 각 요소별 구분자인 t 을 콤마(,)로 치환
Mahout 프로그래밍
User Based Recommendation
 클래스 추가
• 패키지 : recommend.item
• 클래스 : UserRecommend
 Java Build Path 추가
Mahout 프로그래밍
UserRecommend 클래스
public class UserRecommend {
public static void main(String[] args) throws Exception{
/* 데이터 모델 생성 */
DataModel dm = new FileDataModel(new File("data/movies.csv"));
/* 유사도 모델 생성 */
UserSimilarity sim = new PearsonCorrelationSimilarity(dm);
/* 모든 유저들로부터 주어진 유저와 특정 임계값을 충족하거나 초과하는 neighborhood 기준 */
UserNeighborhood neighborhood = new ThresholdUserNeighborhood(0.1, sim, dm);
/* 사용자 추천기 생성 */
UserBasedRecommender recommender = new GenericUserBasedRecommender(dm, neighborhood, sim);
int x= 1;
/* 데이터 모델 내의 유저들의 iterator를 단계별로 이동하며 추천 아이템들 제공 */
for(LongPrimitiveIterator users = dm.getUserIDs(); users.hasNext();){
long userID = users.nextLong(); /* 현재 유저 ID */
/* 현재 유저 ID에 해당되는 5개 아이템 추천 */
List<RecommendedItem> recommendations = recommender.recommend(userID, 5);
for(RecommendedItem recommenation : recommendations){
System.out.println(userID +","+ recommenation.getItemID()+","+recommenation.getValue());
}
if(++x > 5) break; /* 유저 ID 5까지만 출력 */
}
}
}
Mahout 프로그래밍
UserRecommend 클래스 실행 결과
1,1558,5.0
1,1500,5.0
1,1467,5.0
1,1189,5.0
1,1293,5.0
2,1643,5.0
2,1467,5.0
2,1500,5.0
2,1293,5.0
2,1189,5.0
3,1189,5.0
3,1500,5.0
3,1302,5.0
3,1368,5.0
3,1398,4.759591
4,1104,4.7937207
4,853,4.729132
4,169,4.655577
4,1449,4.60582
4,408,4.582672
5,1500,5.0
5,1233,5.0
5,851,5.0
5,1189,5.0
5,119,5.0
1,1500,5.0
1,1467,5.0
1,1189,5.0
1,1293,5.0
1,1367,4.7517056
2,1500,5.0
2,1293,5.0
2,1189,5.0
2,1449,4.608227
2,1594,4.5082903
3,1500,5.0
3,1189,5.0
3,1293,5.0
3,1449,4.76954
3,1450,4.686902
4,1467,5.0
4,1500,5.0
4,1189,5.0
4,1293,5.0
4,1594,4.566541
5,1500,5.0
5,1467,5.0
5,1189,5.0
5,1293,5.0
5,1642,4.66432
sim = new PearsonCorrelationSimilarity(dm); sim = new LogLikelihoodSimilarity(dm);
<유저ID, 추천 아이템ID, 연결 강도>
Mahout 프로그래밍
Item Based Recommendation
 클래스 추가
• 패키지 : recommend.item
• 클래스 : ItemRecommend
 Java Build Path 추가
Mahout 프로그래밍
ItemRecommend 클래스
public class ItemRecommend {
public static void main(String args[]){
DataModel dm;
try {
/* 데이터 모델 생성 */
dm = new FileDataModel(new File("data/movies.csv"));
/* 유사도 모델 선택 */
ItemSimilarity sim = new PearsonCorrelationSimilarity(dm);
/* 추천기 선택 : ItemBased */
GenericItemBasedRecommender recommender = new GenericItemBasedRecommender(dm, sim);
int x=1;
/* 데이터 모델 내의 item들의 iterator를 단계별 이동하며 추천 아이템들 제공 */
for(LongPrimitiveIterator items = dm.getItemIDs(); items.hasNext();){
long itemID = items.nextLong(); /* 현재 item ID */
/*현재 item ID와 가장 유사한 5개 아이템 추천 */
List<RecommendedItem> recommendations = recommender.mostSimilarItems(itemID, 5);
/* 유사한 아이템 출력 = "현재 아이템 ID | 추천된 아이템 ID | 유사도" */
for(RecommendedItem recommendation : recommendations){
System.out.println(itemID + ","+recommendation.getItemID() + "," + recommendation.getValue());
}
x++;/* 아이템 ID 5까지 유사한 아이템들 5개씩 */
if(x>5) System.exit(0);
}
} catch (IOException | TasteException e) {
e.printStackTrace();
}
}
}
Mahout 프로그래밍
ItemRecommend 클래스 실행 결과
1,973,1.0
1,885,1.0
1,920,1.0
1,757,1.0
1,341,1.0
2,341,1.0
2,119,1.0
2,308,1.0
2,75,1.0
2,74,1.0
3,560,1.0
3,422,1.0
3,344,1.0
3,400,1.0
3,115,1.0
4,1038,1.0
4,868,1.0
4,927,1.0
4,643,1.0
4,360,1.0
5,348,1.0
5,34,1.0
5,113,1.0
5,35,1.0
5,6,1.0
1,117,0.9953521
1,151,0.9953065
1,121,0.9952347
1,405,0.99500656
1,50,0.99491894
2,403,0.9964998
2,233,0.9964557
2,161,0.9961404
2,231,0.9960143
2,385,0.9959657
3,405,0.99037176
3,235,0.9893157
3,121,0.9880421
3,250,0.9880041
3,100,0.98773706
4,56,0.99627966
4,174,0.99601305
4,204,0.9959589
4,202,0.99582237
4,385,0.9957967
5,218,0.99432045
5,98,0.9922024
5,234,0.99179345
5,56,0.99115413
5,53,0.9909523
sim = new PearsonCorrelationSimilarity(dm); sim = new LogLikelihoodSimilarity(dm);
<기준 아이템 ID, 비교 아이템ID, 유사도>
References
1. Apache Mahtout Recommender Quick Start
• http://mahout.apache.org/users/recommender/quickstart.html
2. Recommendation System : 협업 필터링을 중심으로
• http://rosaec.snu.ac.kr/meet/file/20120728b.pdf
3. Apache Mahout 맛보기 (30분만에 추천 시스템 만들기)
• http://www.slideshare.net/pitzcarraldo/mahout-cook-book
4. Mahout를 활용한 영화 추천 샘플링
• http://www.mimul.com/pebble/default/2012/03/23/1332494169544.html
5. Recommendation: 추천 – 알고리즘 : Item-Based Filtering
• http://hochul.net/blog/recommendation-daisy/

Contenu connexe

Tendances

[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기NAVER D2
 
Architecture java j2 ee a partager
Architecture java j2 ee a partagerArchitecture java j2 ee a partager
Architecture java j2 ee a partageraliagadir
 
역삼역, 이마트 AI_v최종.pdf
역삼역, 이마트 AI_v최종.pdf역삼역, 이마트 AI_v최종.pdf
역삼역, 이마트 AI_v최종.pdfDeukJin Jeon
 
常見設計模式介紹
常見設計模式介紹常見設計模式介紹
常見設計模式介紹Jace Ju
 
Collections In Java
Collections In JavaCollections In Java
Collections In JavaBinoj T E
 
Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문SeungHyun Eom
 
Mocking in Java with Mockito
Mocking in Java with MockitoMocking in Java with Mockito
Mocking in Java with MockitoRichard Paul
 
LinkedList vs Arraylist- an in depth look at java.util.LinkedList
LinkedList vs Arraylist- an in depth look at java.util.LinkedListLinkedList vs Arraylist- an in depth look at java.util.LinkedList
LinkedList vs Arraylist- an in depth look at java.util.LinkedListMarcus Biel
 
JUnit & Mockito, first steps
JUnit & Mockito, first stepsJUnit & Mockito, first steps
JUnit & Mockito, first stepsRenato Primavera
 
5 collection framework
5 collection framework5 collection framework
5 collection frameworkMinal Maniar
 
An Introduction to JUnit 5 and how to use it with Spring boot tests and Mockito
An Introduction to JUnit 5 and how to use it with Spring boot tests and MockitoAn Introduction to JUnit 5 and how to use it with Spring boot tests and Mockito
An Introduction to JUnit 5 and how to use it with Spring boot tests and Mockitoshaunthomas999
 
Introduce Katalon tool
Introduce Katalon toolIntroduce Katalon tool
Introduce Katalon tool재연 김
 
Introduction to laravel framework
Introduction to laravel frameworkIntroduction to laravel framework
Introduction to laravel frameworkAhmad Fatoni
 
Entreprise Java Beans (EJB)
Entreprise Java Beans (EJB)Entreprise Java Beans (EJB)
Entreprise Java Beans (EJB)Heithem Abbes
 
PHP unserialization vulnerabilities: What are we missing?
PHP unserialization vulnerabilities: What are we missing?PHP unserialization vulnerabilities: What are we missing?
PHP unserialization vulnerabilities: What are we missing?Sam Thomas
 
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器Justin Lin
 
(알도개) GraalVM – 자바를 넘어선 새로운 시작의 서막
(알도개) GraalVM – 자바를 넘어선 새로운 시작의 서막(알도개) GraalVM – 자바를 넘어선 새로운 시작의 서막
(알도개) GraalVM – 자바를 넘어선 새로운 시작의 서막Jay Park
 
[오픈소스컨설팅]Nginx jboss 연동가이드__v1
[오픈소스컨설팅]Nginx jboss 연동가이드__v1[오픈소스컨설팅]Nginx jboss 연동가이드__v1
[오픈소스컨설팅]Nginx jboss 연동가이드__v1Ji-Woong Choi
 

Tendances (20)

[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
 
Architecture java j2 ee a partager
Architecture java j2 ee a partagerArchitecture java j2 ee a partager
Architecture java j2 ee a partager
 
역삼역, 이마트 AI_v최종.pdf
역삼역, 이마트 AI_v최종.pdf역삼역, 이마트 AI_v최종.pdf
역삼역, 이마트 AI_v최종.pdf
 
常見設計模式介紹
常見設計模式介紹常見設計模式介紹
常見設計模式介紹
 
Collections In Java
Collections In JavaCollections In Java
Collections In Java
 
Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문
 
Mocking in Java with Mockito
Mocking in Java with MockitoMocking in Java with Mockito
Mocking in Java with Mockito
 
Spring Core
Spring CoreSpring Core
Spring Core
 
LinkedList vs Arraylist- an in depth look at java.util.LinkedList
LinkedList vs Arraylist- an in depth look at java.util.LinkedListLinkedList vs Arraylist- an in depth look at java.util.LinkedList
LinkedList vs Arraylist- an in depth look at java.util.LinkedList
 
JUnit & Mockito, first steps
JUnit & Mockito, first stepsJUnit & Mockito, first steps
JUnit & Mockito, first steps
 
5 collection framework
5 collection framework5 collection framework
5 collection framework
 
An Introduction to JUnit 5 and how to use it with Spring boot tests and Mockito
An Introduction to JUnit 5 and how to use it with Spring boot tests and MockitoAn Introduction to JUnit 5 and how to use it with Spring boot tests and Mockito
An Introduction to JUnit 5 and how to use it with Spring boot tests and Mockito
 
Optional in Java 8
Optional in Java 8Optional in Java 8
Optional in Java 8
 
Introduce Katalon tool
Introduce Katalon toolIntroduce Katalon tool
Introduce Katalon tool
 
Introduction to laravel framework
Introduction to laravel frameworkIntroduction to laravel framework
Introduction to laravel framework
 
Entreprise Java Beans (EJB)
Entreprise Java Beans (EJB)Entreprise Java Beans (EJB)
Entreprise Java Beans (EJB)
 
PHP unserialization vulnerabilities: What are we missing?
PHP unserialization vulnerabilities: What are we missing?PHP unserialization vulnerabilities: What are we missing?
PHP unserialization vulnerabilities: What are we missing?
 
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
 
(알도개) GraalVM – 자바를 넘어선 새로운 시작의 서막
(알도개) GraalVM – 자바를 넘어선 새로운 시작의 서막(알도개) GraalVM – 자바를 넘어선 새로운 시작의 서막
(알도개) GraalVM – 자바를 넘어선 새로운 시작의 서막
 
[오픈소스컨설팅]Nginx jboss 연동가이드__v1
[오픈소스컨설팅]Nginx jboss 연동가이드__v1[오픈소스컨설팅]Nginx jboss 연동가이드__v1
[오픈소스컨설팅]Nginx jboss 연동가이드__v1
 

En vedette

추천시스템과 협업필터링
추천시스템과 협업필터링추천시스템과 협업필터링
추천시스템과 협업필터링혜웅 박
 
Collaborative filtering
Collaborative filteringCollaborative filtering
Collaborative filteringSungMin OH
 
Hello, Recommender System
Hello, Recommender SystemHello, Recommender System
Hello, Recommender SystemKyuhwan Jung
 
Tensorflow for Deep Learning(SK Planet)
Tensorflow for Deep Learning(SK Planet)Tensorflow for Deep Learning(SK Planet)
Tensorflow for Deep Learning(SK Planet)Tae Young Lee
 
Docker (Compose) 활용 - 개발 환경 구성하기
Docker (Compose) 활용 - 개발 환경 구성하기Docker (Compose) 활용 - 개발 환경 구성하기
Docker (Compose) 활용 - 개발 환경 구성하기raccoony
 
GDG DevFest 2017 Seoul 프론트엔드 모던 프레임워크 낱낱히 파헤치기
 GDG DevFest 2017 Seoul 프론트엔드 모던 프레임워크 낱낱히 파헤치기 GDG DevFest 2017 Seoul 프론트엔드 모던 프레임워크 낱낱히 파헤치기
GDG DevFest 2017 Seoul 프론트엔드 모던 프레임워크 낱낱히 파헤치기Kenneth Ceyer
 
텐서플로우 설치도 했고 튜토리얼도 봤고 기초 예제도 짜봤다면 TensorFlow KR Meetup 2016
텐서플로우 설치도 했고 튜토리얼도 봤고 기초 예제도 짜봤다면 TensorFlow KR Meetup 2016텐서플로우 설치도 했고 튜토리얼도 봤고 기초 예제도 짜봤다면 TensorFlow KR Meetup 2016
텐서플로우 설치도 했고 튜토리얼도 봤고 기초 예제도 짜봤다면 TensorFlow KR Meetup 2016Taehoon Kim
 
지적 대화를 위한 깊고 넓은 딥러닝 PyCon APAC 2016
지적 대화를 위한 깊고 넓은 딥러닝 PyCon APAC 2016지적 대화를 위한 깊고 넓은 딥러닝 PyCon APAC 2016
지적 대화를 위한 깊고 넓은 딥러닝 PyCon APAC 2016Taehoon Kim
 
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016Taehoon Kim
 
알아두면 쓸데있는 신기한 강화학습 NAVER 2017
알아두면 쓸데있는 신기한 강화학습 NAVER 2017알아두면 쓸데있는 신기한 강화학습 NAVER 2017
알아두면 쓸데있는 신기한 강화학습 NAVER 2017Taehoon Kim
 
책 읽어주는 딥러닝: 배우 유인나가 해리포터를 읽어준다면 DEVIEW 2017
책 읽어주는 딥러닝: 배우 유인나가 해리포터를 읽어준다면 DEVIEW 2017책 읽어주는 딥러닝: 배우 유인나가 해리포터를 읽어준다면 DEVIEW 2017
책 읽어주는 딥러닝: 배우 유인나가 해리포터를 읽어준다면 DEVIEW 2017Taehoon Kim
 

En vedette (12)

추천시스템과 협업필터링
추천시스템과 협업필터링추천시스템과 협업필터링
추천시스템과 협업필터링
 
Collaborative filtering
Collaborative filteringCollaborative filtering
Collaborative filtering
 
Hello, Recommender System
Hello, Recommender SystemHello, Recommender System
Hello, Recommender System
 
Tensorflow for Deep Learning(SK Planet)
Tensorflow for Deep Learning(SK Planet)Tensorflow for Deep Learning(SK Planet)
Tensorflow for Deep Learning(SK Planet)
 
1.introduction
1.introduction1.introduction
1.introduction
 
Docker (Compose) 활용 - 개발 환경 구성하기
Docker (Compose) 활용 - 개발 환경 구성하기Docker (Compose) 활용 - 개발 환경 구성하기
Docker (Compose) 활용 - 개발 환경 구성하기
 
GDG DevFest 2017 Seoul 프론트엔드 모던 프레임워크 낱낱히 파헤치기
 GDG DevFest 2017 Seoul 프론트엔드 모던 프레임워크 낱낱히 파헤치기 GDG DevFest 2017 Seoul 프론트엔드 모던 프레임워크 낱낱히 파헤치기
GDG DevFest 2017 Seoul 프론트엔드 모던 프레임워크 낱낱히 파헤치기
 
텐서플로우 설치도 했고 튜토리얼도 봤고 기초 예제도 짜봤다면 TensorFlow KR Meetup 2016
텐서플로우 설치도 했고 튜토리얼도 봤고 기초 예제도 짜봤다면 TensorFlow KR Meetup 2016텐서플로우 설치도 했고 튜토리얼도 봤고 기초 예제도 짜봤다면 TensorFlow KR Meetup 2016
텐서플로우 설치도 했고 튜토리얼도 봤고 기초 예제도 짜봤다면 TensorFlow KR Meetup 2016
 
지적 대화를 위한 깊고 넓은 딥러닝 PyCon APAC 2016
지적 대화를 위한 깊고 넓은 딥러닝 PyCon APAC 2016지적 대화를 위한 깊고 넓은 딥러닝 PyCon APAC 2016
지적 대화를 위한 깊고 넓은 딥러닝 PyCon APAC 2016
 
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016
 
알아두면 쓸데있는 신기한 강화학습 NAVER 2017
알아두면 쓸데있는 신기한 강화학습 NAVER 2017알아두면 쓸데있는 신기한 강화학습 NAVER 2017
알아두면 쓸데있는 신기한 강화학습 NAVER 2017
 
책 읽어주는 딥러닝: 배우 유인나가 해리포터를 읽어준다면 DEVIEW 2017
책 읽어주는 딥러닝: 배우 유인나가 해리포터를 읽어준다면 DEVIEW 2017책 읽어주는 딥러닝: 배우 유인나가 해리포터를 읽어준다면 DEVIEW 2017
책 읽어주는 딥러닝: 배우 유인나가 해리포터를 읽어준다면 DEVIEW 2017
 

Similaire à 20141223 머하웃(mahout) 협업필터링_추천시스템구현

Flamingo 1.2 릴리즈의 지원 기능 정리
Flamingo 1.2 릴리즈의 지원 기능 정리Flamingo 1.2 릴리즈의 지원 기능 정리
Flamingo 1.2 릴리즈의 지원 기능 정리BYOUNG GON KIM
 
Java Virtual Machine, Call stack, Java Byte Code
Java Virtual Machine, Call stack, Java Byte CodeJava Virtual Machine, Call stack, Java Byte Code
Java Virtual Machine, Call stack, Java Byte CodeJavajigi Jaesung
 
[D2 COMMUNITY] Spark User Group - 스파크를 통한 딥러닝 이론과 실제
[D2 COMMUNITY] Spark User Group - 스파크를 통한 딥러닝 이론과 실제[D2 COMMUNITY] Spark User Group - 스파크를 통한 딥러닝 이론과 실제
[D2 COMMUNITY] Spark User Group - 스파크를 통한 딥러닝 이론과 실제NAVER D2
 
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: 인터넷 쇼핑몰의 실시간 분석 플랫폼 구축 사례
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: 인터넷 쇼핑몰의 실시간 분석 플랫폼 구축 사례GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: 인터넷 쇼핑몰의 실시간 분석 플랫폼 구축 사례
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: 인터넷 쇼핑몰의 실시간 분석 플랫폼 구축 사례Gruter
 
Udamp3 django apache-my_sql_python3_ubuntu14.04-v11
Udamp3 django apache-my_sql_python3_ubuntu14.04-v11Udamp3 django apache-my_sql_python3_ubuntu14.04-v11
Udamp3 django apache-my_sql_python3_ubuntu14.04-v11Dongil Yeom
 
Catalyst Framework 살펴보기
Catalyst Framework 살펴보기Catalyst Framework 살펴보기
Catalyst Framework 살펴보기corund
 
Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)beom kyun choi
 
Sonarqube 20160509
Sonarqube 20160509Sonarqube 20160509
Sonarqube 20160509영석 조
 
막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js연웅 조
 
공간정보아카데미 - Day1 오픈소스개발 일반
공간정보아카데미 - Day1 오픈소스개발 일반공간정보아카데미 - Day1 오픈소스개발 일반
공간정보아카데미 - Day1 오픈소스개발 일반BJ Jang
 
Data discovery & metadata management (amundsen installation)
Data discovery & metadata management (amundsen installation)Data discovery & metadata management (amundsen installation)
Data discovery & metadata management (amundsen installation)창언 정
 
Apache Htrace overview (20160520)
Apache Htrace overview (20160520)Apache Htrace overview (20160520)
Apache Htrace overview (20160520)Steve Min
 
[2010 네이트 앱스토어 개발자 세미나] 앱스 제작 사례 (2) 소셜게임 서버 구성 전략
[2010 네이트 앱스토어 개발자 세미나] 앱스 제작 사례 (2) 소셜게임 서버 구성 전략[2010 네이트 앱스토어 개발자 세미나] 앱스 제작 사례 (2) 소셜게임 서버 구성 전략
[2010 네이트 앱스토어 개발자 세미나] 앱스 제작 사례 (2) 소셜게임 서버 구성 전략Cyworld AppStore (SK Communications)
 
Django로 배우는 쉽고 빠른 웹개발 study 자료
Django로 배우는 쉽고 빠른 웹개발 study 자료Django로 배우는 쉽고 빠른 웹개발 study 자료
Django로 배우는 쉽고 빠른 웹개발 study 자료Han Sung Kim
 
오픈소스로 만드는 DB 모니터링 시스템 (w/graphite+grafana)
오픈소스로 만드는 DB 모니터링 시스템 (w/graphite+grafana)오픈소스로 만드는 DB 모니터링 시스템 (w/graphite+grafana)
오픈소스로 만드는 DB 모니터링 시스템 (w/graphite+grafana)I Goo Lee
 
하둡 설치(의사분산모드)
하둡 설치(의사분산모드)하둡 설치(의사분산모드)
하둡 설치(의사분산모드)Kwangyoung Jeon
 

Similaire à 20141223 머하웃(mahout) 협업필터링_추천시스템구현 (20)

Flamingo 1.2 릴리즈의 지원 기능 정리
Flamingo 1.2 릴리즈의 지원 기능 정리Flamingo 1.2 릴리즈의 지원 기능 정리
Flamingo 1.2 릴리즈의 지원 기능 정리
 
Java_01 기초
Java_01 기초Java_01 기초
Java_01 기초
 
Java 기초
Java 기초Java 기초
Java 기초
 
Java Virtual Machine, Call stack, Java Byte Code
Java Virtual Machine, Call stack, Java Byte CodeJava Virtual Machine, Call stack, Java Byte Code
Java Virtual Machine, Call stack, Java Byte Code
 
[D2 COMMUNITY] Spark User Group - 스파크를 통한 딥러닝 이론과 실제
[D2 COMMUNITY] Spark User Group - 스파크를 통한 딥러닝 이론과 실제[D2 COMMUNITY] Spark User Group - 스파크를 통한 딥러닝 이론과 실제
[D2 COMMUNITY] Spark User Group - 스파크를 통한 딥러닝 이론과 실제
 
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: 인터넷 쇼핑몰의 실시간 분석 플랫폼 구축 사례
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: 인터넷 쇼핑몰의 실시간 분석 플랫폼 구축 사례GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: 인터넷 쇼핑몰의 실시간 분석 플랫폼 구축 사례
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: 인터넷 쇼핑몰의 실시간 분석 플랫폼 구축 사례
 
Udamp3 django apache-my_sql_python3_ubuntu14.04-v11
Udamp3 django apache-my_sql_python3_ubuntu14.04-v11Udamp3 django apache-my_sql_python3_ubuntu14.04-v11
Udamp3 django apache-my_sql_python3_ubuntu14.04-v11
 
Catalyst Framework 살펴보기
Catalyst Framework 살펴보기Catalyst Framework 살펴보기
Catalyst Framework 살펴보기
 
Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)
 
Sonarqube 20160509
Sonarqube 20160509Sonarqube 20160509
Sonarqube 20160509
 
막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js
 
공간정보아카데미 - Day1 오픈소스개발 일반
공간정보아카데미 - Day1 오픈소스개발 일반공간정보아카데미 - Day1 오픈소스개발 일반
공간정보아카데미 - Day1 오픈소스개발 일반
 
Data discovery & metadata management (amundsen installation)
Data discovery & metadata management (amundsen installation)Data discovery & metadata management (amundsen installation)
Data discovery & metadata management (amundsen installation)
 
Apache Htrace overview (20160520)
Apache Htrace overview (20160520)Apache Htrace overview (20160520)
Apache Htrace overview (20160520)
 
[2010 네이트 앱스토어 개발자 세미나] 앱스 제작 사례 (2) 소셜게임 서버 구성 전략
[2010 네이트 앱스토어 개발자 세미나] 앱스 제작 사례 (2) 소셜게임 서버 구성 전략[2010 네이트 앱스토어 개발자 세미나] 앱스 제작 사례 (2) 소셜게임 서버 구성 전략
[2010 네이트 앱스토어 개발자 세미나] 앱스 제작 사례 (2) 소셜게임 서버 구성 전략
 
Django로 배우는 쉽고 빠른 웹개발 study 자료
Django로 배우는 쉽고 빠른 웹개발 study 자료Django로 배우는 쉽고 빠른 웹개발 study 자료
Django로 배우는 쉽고 빠른 웹개발 study 자료
 
Jdk 7 3-nio2
Jdk 7 3-nio2Jdk 7 3-nio2
Jdk 7 3-nio2
 
Exp manager
Exp managerExp manager
Exp manager
 
오픈소스로 만드는 DB 모니터링 시스템 (w/graphite+grafana)
오픈소스로 만드는 DB 모니터링 시스템 (w/graphite+grafana)오픈소스로 만드는 DB 모니터링 시스템 (w/graphite+grafana)
오픈소스로 만드는 DB 모니터링 시스템 (w/graphite+grafana)
 
하둡 설치(의사분산모드)
하둡 설치(의사분산모드)하둡 설치(의사분산모드)
하둡 설치(의사분산모드)
 

Plus de Tae Young Lee

2016년 비씨카드 신입사원 선배특강 20160719
2016년 비씨카드 신입사원 선배특강 201607192016년 비씨카드 신입사원 선배특강 20160719
2016년 비씨카드 신입사원 선배특강 20160719Tae Young Lee
 
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)Tae Young Lee
 
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영) 파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영) Tae Young Lee
 
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)Tae Young Lee
 
20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)
20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering) 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)
20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering) Tae Young Lee
 
2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영
2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영
2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영Tae Young Lee
 
20150306 파이썬기초 IPython을이용한프로그래밍_이태영
20150306 파이썬기초 IPython을이용한프로그래밍_이태영20150306 파이썬기초 IPython을이용한프로그래밍_이태영
20150306 파이썬기초 IPython을이용한프로그래밍_이태영Tae Young Lee
 
20141111 파이썬으로 Hadoop MR프로그래밍
20141111 파이썬으로 Hadoop MR프로그래밍20141111 파이썬으로 Hadoop MR프로그래밍
20141111 파이썬으로 Hadoop MR프로그래밍Tae Young Lee
 
20141029 하둡2.5와 hive설치 및 예제
20141029 하둡2.5와 hive설치 및 예제20141029 하둡2.5와 hive설치 및 예제
20141029 하둡2.5와 hive설치 및 예제Tae Young Lee
 

Plus de Tae Young Lee (9)

2016년 비씨카드 신입사원 선배특강 20160719
2016년 비씨카드 신입사원 선배특강 201607192016년 비씨카드 신입사원 선배특강 20160719
2016년 비씨카드 신입사원 선배특강 20160719
 
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
 
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영) 파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
 
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
 
20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)
20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering) 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)
20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)
 
2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영
2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영
2016317 파이썬기초_파이썬_다중설치부터_Jupyter를이용한프로그래밍_이태영
 
20150306 파이썬기초 IPython을이용한프로그래밍_이태영
20150306 파이썬기초 IPython을이용한프로그래밍_이태영20150306 파이썬기초 IPython을이용한프로그래밍_이태영
20150306 파이썬기초 IPython을이용한프로그래밍_이태영
 
20141111 파이썬으로 Hadoop MR프로그래밍
20141111 파이썬으로 Hadoop MR프로그래밍20141111 파이썬으로 Hadoop MR프로그래밍
20141111 파이썬으로 Hadoop MR프로그래밍
 
20141029 하둡2.5와 hive설치 및 예제
20141029 하둡2.5와 hive설치 및 예제20141029 하둡2.5와 hive설치 및 예제
20141029 하둡2.5와 hive설치 및 예제
 

20141223 머하웃(mahout) 협업필터링_추천시스템구현

  • 2. Mahout 설치 1) Mahout 0.9 다운로드 http://mahout.apache.org 접속 후 다운로드 2) 계정 홈 디렉토리로 mv $ mv mahout-distribution-0.9.tar.gz ~ 3) 압축을 풀고 mahout 심볼릭 링크를 생성 $ ln -s mahout-distribution-0.9 mahout 4) .bash_profile에 MAHOUT_HOME과 PATH 추가 1 # .bash_profile 2 3 # Get the aliases and functions 4 if [ -f ~/.bashrc ]; then 5 . ~/.bashrc 6 fi 7 8 # User specific environment and startup programs 9 10 export JAVA_HOME=$HOME/java 11 export HADOOP_HOME=$HOME/hadoop 12 export PYTHON_HOME=$HOME/python 13 export MAHOUT_HOME=$HOME/mahout 14 15 PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PYTHON_HOME/:$MAHOUT_HOME/bin 16 17 export PATH
  • 3. 협업 필터링 알고리즘 Collarborative filtering 1. User based – (첫째, 비슷한 사용자 찾음) • 취향이 비슷한 유저 B가 어떤 아이템을 구매했는지 확인 후 B가 구매했던 상품으로 추천 2. Item based – (첫째, 비슷한 아이템 찾음) • 내가 구매했던 상품들을 기반으로, 연관성이 있는 상품을 추천 User based Recommendation Item based Recommendation
  • 4. 유사도 Similarity 1. Euclidean Distance • 두 객체 간의 선호도 거리를 계산하여, 작을 수록 비슷한 성향을 가짐 2. Cosine Similarity (=Pearson Similarity) • 두 객체 간의 선호도를 벡터화 하여, 벡터 사이의 각도가 적을 수록 유사 3. Jaccard Similarity • 두 객체 간의 요소들의 전체 요소들 중 교집합되는 요소가 차지하는 비중
  • 5. Mahout What is Mahout? The Apache Mahout™ project's goal is to build a scalable machine learning library. • Clustering (군집화) • Classification (분류) • Recommendation (추천 및 협업필터링) • Pattern Mining (패턴 마이닝) • Regression (회귀 분석) • Evolutionary Algorithms (진화 알고리즘) • Dimension reduction (차원 리덕션) Mahout is made by JAVA • We can use Mahout core libarary for java programming. • NO HADOOP ONLY.
  • 6. Mahout 프로그래밍 Recommendation 1. MovieLens 데이터 셋 ( http://grouplens.org/datasets/movielens ) • 10만개 / 1백만개 / 1천만개 별로 평가 데이터 셋 제공 • 미국 내 상영된 영화를 사용자들이 평가한 결과물 1997/9/19 ~ 1998/4/22간 • 미네소타 대학 컴퓨터과학 연구실에서 수집한 추천 알고리즘을 위한 학습데이터 다운로드(약 4.8MB)
  • 7. 2. SLF4J 라이브러리 (http://www.slf4j.org ) • mahout 라이브러리 호환성 필요 Mahout 프로그래밍 Recommendation 다운로드(약 4.3MB)
  • 8. 3. GUAVA 라이브러리 ( https://code.google.com/p/guava-libraries ) • mahout의 데이터 객체는 guava 라이브러리 의존 Mahout 프로그래밍 Recommendation 다운로드(약 4.3MB) 다운로드(약 2.2MB)
  • 9. 4. Apache commons Math 라이브러리 (http://commons.apache.org/proper/commons-math ) • 수치 계산용 라이브러리 Mahout 프로그래밍 Recommendation 다운로드(약 14.3MB)
  • 10.  최종 라이브러리 리스트 • commons-math3-3.4.jar • guava-18.0.jar • mahout-core-0.9.jar • mahout-integration-0.9.jar • mahout-math-0.9.jar • slf4j-api-1.7.7.jar • slf4j-nop-1.7.7.jar Mahout 프로그래밍 Recommendation
  • 11. Mahout 프로그래밍 Item Based Recommendation  프로젝트 생성 • ItemRecommender • Java 5 SDK 이상
  • 12. Mahout 프로그래밍 Item Based Recommendation  프로젝트 개발 준비 • Libraries는 모두 lib 폴더 밑으로 복사 • ml-100k.zip(MovieLens 데이터)를 압축을 푼 뒤 data 폴더로 u.data를 복사 README 파일 내 설명 u.data -- The full u data set, 100000 ratings by 943 users on 1682 items. Each user has rated at least 20 movies. Users and items are numbered consecutively from 1. The data is randomly ordered. This is a tab separated list of user id | item id | rating | timestamp. The time stamps are unix seconds since 1/1/1970 UTC
  • 13. Mahout 프로그래밍 Recommendation  프로젝트 개발 준비 • u.data 파일을 csv 파일 형태로 변경하여 movies.csv로 저장 • u.data 파일의 각 요소별 구분자인 t 을 콤마(,)로 치환
  • 14. Mahout 프로그래밍 User Based Recommendation  클래스 추가 • 패키지 : recommend.item • 클래스 : UserRecommend  Java Build Path 추가
  • 15. Mahout 프로그래밍 UserRecommend 클래스 public class UserRecommend { public static void main(String[] args) throws Exception{ /* 데이터 모델 생성 */ DataModel dm = new FileDataModel(new File("data/movies.csv")); /* 유사도 모델 생성 */ UserSimilarity sim = new PearsonCorrelationSimilarity(dm); /* 모든 유저들로부터 주어진 유저와 특정 임계값을 충족하거나 초과하는 neighborhood 기준 */ UserNeighborhood neighborhood = new ThresholdUserNeighborhood(0.1, sim, dm); /* 사용자 추천기 생성 */ UserBasedRecommender recommender = new GenericUserBasedRecommender(dm, neighborhood, sim); int x= 1; /* 데이터 모델 내의 유저들의 iterator를 단계별로 이동하며 추천 아이템들 제공 */ for(LongPrimitiveIterator users = dm.getUserIDs(); users.hasNext();){ long userID = users.nextLong(); /* 현재 유저 ID */ /* 현재 유저 ID에 해당되는 5개 아이템 추천 */ List<RecommendedItem> recommendations = recommender.recommend(userID, 5); for(RecommendedItem recommenation : recommendations){ System.out.println(userID +","+ recommenation.getItemID()+","+recommenation.getValue()); } if(++x > 5) break; /* 유저 ID 5까지만 출력 */ } } }
  • 16. Mahout 프로그래밍 UserRecommend 클래스 실행 결과 1,1558,5.0 1,1500,5.0 1,1467,5.0 1,1189,5.0 1,1293,5.0 2,1643,5.0 2,1467,5.0 2,1500,5.0 2,1293,5.0 2,1189,5.0 3,1189,5.0 3,1500,5.0 3,1302,5.0 3,1368,5.0 3,1398,4.759591 4,1104,4.7937207 4,853,4.729132 4,169,4.655577 4,1449,4.60582 4,408,4.582672 5,1500,5.0 5,1233,5.0 5,851,5.0 5,1189,5.0 5,119,5.0 1,1500,5.0 1,1467,5.0 1,1189,5.0 1,1293,5.0 1,1367,4.7517056 2,1500,5.0 2,1293,5.0 2,1189,5.0 2,1449,4.608227 2,1594,4.5082903 3,1500,5.0 3,1189,5.0 3,1293,5.0 3,1449,4.76954 3,1450,4.686902 4,1467,5.0 4,1500,5.0 4,1189,5.0 4,1293,5.0 4,1594,4.566541 5,1500,5.0 5,1467,5.0 5,1189,5.0 5,1293,5.0 5,1642,4.66432 sim = new PearsonCorrelationSimilarity(dm); sim = new LogLikelihoodSimilarity(dm); <유저ID, 추천 아이템ID, 연결 강도>
  • 17. Mahout 프로그래밍 Item Based Recommendation  클래스 추가 • 패키지 : recommend.item • 클래스 : ItemRecommend  Java Build Path 추가
  • 18. Mahout 프로그래밍 ItemRecommend 클래스 public class ItemRecommend { public static void main(String args[]){ DataModel dm; try { /* 데이터 모델 생성 */ dm = new FileDataModel(new File("data/movies.csv")); /* 유사도 모델 선택 */ ItemSimilarity sim = new PearsonCorrelationSimilarity(dm); /* 추천기 선택 : ItemBased */ GenericItemBasedRecommender recommender = new GenericItemBasedRecommender(dm, sim); int x=1; /* 데이터 모델 내의 item들의 iterator를 단계별 이동하며 추천 아이템들 제공 */ for(LongPrimitiveIterator items = dm.getItemIDs(); items.hasNext();){ long itemID = items.nextLong(); /* 현재 item ID */ /*현재 item ID와 가장 유사한 5개 아이템 추천 */ List<RecommendedItem> recommendations = recommender.mostSimilarItems(itemID, 5); /* 유사한 아이템 출력 = "현재 아이템 ID | 추천된 아이템 ID | 유사도" */ for(RecommendedItem recommendation : recommendations){ System.out.println(itemID + ","+recommendation.getItemID() + "," + recommendation.getValue()); } x++;/* 아이템 ID 5까지 유사한 아이템들 5개씩 */ if(x>5) System.exit(0); } } catch (IOException | TasteException e) { e.printStackTrace(); } } }
  • 19. Mahout 프로그래밍 ItemRecommend 클래스 실행 결과 1,973,1.0 1,885,1.0 1,920,1.0 1,757,1.0 1,341,1.0 2,341,1.0 2,119,1.0 2,308,1.0 2,75,1.0 2,74,1.0 3,560,1.0 3,422,1.0 3,344,1.0 3,400,1.0 3,115,1.0 4,1038,1.0 4,868,1.0 4,927,1.0 4,643,1.0 4,360,1.0 5,348,1.0 5,34,1.0 5,113,1.0 5,35,1.0 5,6,1.0 1,117,0.9953521 1,151,0.9953065 1,121,0.9952347 1,405,0.99500656 1,50,0.99491894 2,403,0.9964998 2,233,0.9964557 2,161,0.9961404 2,231,0.9960143 2,385,0.9959657 3,405,0.99037176 3,235,0.9893157 3,121,0.9880421 3,250,0.9880041 3,100,0.98773706 4,56,0.99627966 4,174,0.99601305 4,204,0.9959589 4,202,0.99582237 4,385,0.9957967 5,218,0.99432045 5,98,0.9922024 5,234,0.99179345 5,56,0.99115413 5,53,0.9909523 sim = new PearsonCorrelationSimilarity(dm); sim = new LogLikelihoodSimilarity(dm); <기준 아이템 ID, 비교 아이템ID, 유사도>
  • 20. References 1. Apache Mahtout Recommender Quick Start • http://mahout.apache.org/users/recommender/quickstart.html 2. Recommendation System : 협업 필터링을 중심으로 • http://rosaec.snu.ac.kr/meet/file/20120728b.pdf 3. Apache Mahout 맛보기 (30분만에 추천 시스템 만들기) • http://www.slideshare.net/pitzcarraldo/mahout-cook-book 4. Mahout를 활용한 영화 추천 샘플링 • http://www.mimul.com/pebble/default/2012/03/23/1332494169544.html 5. Recommendation: 추천 – 알고리즘 : Item-Based Filtering • http://hochul.net/blog/recommendation-daisy/