Mahout

6,434
-1

Published on

Published in: Technology
1 Comment
60 Likes
Statistics
Notes
  • It is simple & good .
    Many I could not understand as they are not in English.
    Thanks for sharing.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
6,434
On Slideshare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
2
Comments
1
Likes
60
Embeds 0
No embeds

No notes for slide

Mahout

  1. 1. Mahout bt22dr@gmail.com
  2. 2. 1. 소개 (1 h) o Machine Learning o Mahout 2. 도구 (1 h) o Vector/Matrix o Similarity/Distance Measures 3. Mahout 알고리즘들 o Clustering (1.5 h) o Classification (1 h) o Recommendation (1 h) 목차
  3. 3. 1. 소개 • Mahout에 대한 간략한 소개 • 기계학습 전반에 대한 이해
  4. 4. Mahout? The Apache Mahout™ machine learning library's goal is to build scalable machine learning libraries. - 출처 : http://mahout.apache.org/
  5. 5. Mahout 이란?
  6. 6. 분석 기법 • 데이터 분석 : 축적된 대량의 데이터를 다양한 형태로 가공하 여 업무에 숨어있는 과제와 문제점을 밝히고, 과제와 문제점 의 요인을 분석해서 대책을 세우고 개선하는 활동을 말한다. • 데이터 마이닝 : 데이터 마이닝은 데이터를 분석해서 패턴을 발견하고 예측 모델을 만드는 자동화된 프로세스다. 수학, 통 계, 기계학습 등 다양한 연구 영역에 기초를 두고 있다. • 기계학습 : 컴퓨터가 스스로 학습하게 하는 알고리즘에 관련 된 인공지능의 한 영역. 주어진 데이터의 집합(트레이닝 데이 터)을 이용해서 데이터의 속성에 관한 정보를 추론하는 알고 리즘이다. 이 정보를 이용하여 미래에 발견될 다른 데이터(테 스트 데이터)에 관한 예측이 가능
  7. 7. 기계학습 vs 데이터마이닝 • Machine learning focuses on prediction, based on known properties learned from the training data. • Data mining (which is the analysis step of Knowledge Discovery in Databases) focuses on the discovery of (previously) unknown properties on the data.
  8. 8. • 데이터 분석 - 이미 알려진 모델에 데이터가 적 합한지를 다루는 개념 • 데이터의 조회, 요약, 경향 분석하는 작업 • 리포팅, OLAP 등 • 데이터 마이닝 - 데이터를 분석해서 이전에 알 려지지 않은 패턴이나 모델을 발굴하는데 목적 을 둠. • 둘 다 비즈니스 인텔리전스의 분야다. 데이터 마이닝 vs 데이터 분석
  9. 9. 데이터 분석 - ABC 분석 - 포지션 분석 - 방사형 차트 - 회귀 분석 - 등등
  10. 10. 데이터 마이닝 • 데이터베이스를 훈련 데이터로 간주하여 수학 , 통계학, 기계학습 기법 등의 알고리즘을 이 용해 유용한 정보를 도출해내는 과정을 말한 다.
  11. 11. 데이터 마이닝 분류
  12. 12. Machine Learning • 기계 학습은 인공 지능의 한 분야로, 컴퓨터 가 학습할 수 있도록 하는 알고리즘과 기술을 개발하는 분야를 말한다. • "컴퓨터에게 배울 수 있는 능력, 즉 코드로 정 의하지 않은 동작을 실행하는 능력에 대한 연 구 분야" (아서 사무엘, 1959년) - 출처 : Wikipedia
  13. 13. 기계학습 • 환경과의 상호작용에 기반한 경험적인 데 이터로부터 스스로 성능을 향상시키는 시 스템을 연구하는 과학과 기술 • 환경 : 학습 시스템이 상호작용하는 대상 존재 • 데이터 : 시스템이 경험하는 데이터 형태 차이 • 성능 : 지속적인 개선을 통해 지속적인 향상
  14. 14. 기계학습 •“A computer program is said to learn from experience E with respect to some task T and some performance measure P, if its performance on T, as measured by P, improves with experience E.” - Tom Mitchell (1998)
  15. 15. 기계학습 분류 • 감독(supervised) 학습 • 주어진 입력 속성에 대응되는 결과 변수를 추론하는 수학적 모델을 만드는 것이 목적 • 결정 트리, 분류(결정 트리, 신경망, SVM), 회귀 분석 • 무감독(unsupervised) 학습 • 학습 데이터에 입력은 주어지나 대응되는 출력이 없다. • 입력 패턴들에 공통적인 특성을 파악하는 것이 학습의 목적 • 클러스터링, 차원축소 • 강화(reinforcement) 학습, 추천 시스템
  16. 16. 감독 학습 출처 : https://www.coursera.org/course/ml Size in feet2 (x) Price in 1000’s (y) 1 2104 460 2 1416 232 3 1534 315 … … … n 852 178 Notation : n = number of training examples x = input variable / features y = output(or target) variable
  17. 17. 감독 학습 출처 : https://www.coursera.org/course/ml
  18. 18. 감독 학습 출처 : https://www.coursera.org/course/ml
  19. 19. 무감독 학습 출처 : https://www.coursera.org/course/ml ?
  20. 20. Mahout 이란? • 아파치 오픈소스 기계학습 라이브러리 o 군집, 분류, 추천시스템 (협업 필터링) • 규모 확장성을 가짐 o 기존 알고리즘을 대용량 처리 및 확장이 가능하도록 구현 o standalone, pseudo or fully distributed Hadoop • 자바 라이브러리의 형태로 제공 o UI, 패키징 서버, 설치 프로그램 등 제공하지 않음 o 개발자가 프로그래밍해서 사용해야함
  21. 21. Mahout 이란? • 부가 정보들... o 힌두어로 '코끼리 몰이꾼'이라는 의미 o 초기 루씬(2008)의 하부 프로젝트로 시작 o 오픈소스 협업 필터링 프로젝트 Taste(2005) 흡수 o 현재 활발히 개발 진행 중 (ver. 0.9)
  22. 22. Current state of ML libraries • Lack community • Lack scalability • Lack documentations and examples • Lack Apache licensing • Are not well tested • Are Research oriented • Not built over existing production quality libraries • Lack “Deployability”
  23. 23. Mahout currently has • Collaborative Filtering o User-Based Collaborative Filtering - single machine o Item-Based Collaborative Filtering - single machine / MapReduce o Matrix Factorization with Alternating Least Squares - single machine / MapReduce o Weighted Matrix Factorization, SVD++, Parallel SGD - single machine • Classification o Logistic Regression - trained via SGD - single machine o Naive Bayes/ Complementary Naive Bayes - MapReduce o Random Forest - MapReduce o Hidden Markov Models - single machine o Multilayer Perceptron - single machine • Clustering o Canopy Clustering - single machine / MapReduce o k-Means Clustering - single machine / MapReduce o Fuzzy k-Means - single machine / MapReduce o Streaming k-Means - single machine / MapReduce o Spectral Clustering – MapReduce
  24. 24. Mahout currently has • Dimensionality Reduction o Singular Value Decomposition - single machine o Lanczos Algorithm - single machine / MapReduce o Stochastic SVD - single machine / MapReduce / Spark o Principal Component Analysis (via Stochastic SVD)- single machine / MapReduce • Topic Models o Latent Dirichlet Allocation - single machine / MapReduce • Miscellaneous o Frequent Pattern Mining - MapReduce o RowSimilarityJob - compute pairwise similarities between the rows of a matrix - MapReduce o ConcatMatrices - combine 2 matrices or vectors into a single matrix - MapReduce o Collocations - find co-locations of tokens in text - MapReduce
  25. 25. Who uses Mahout? • Adobe • Amazon • AOL • Drupal • Foursquare • Twitter • Yahoo! • ... - 출처 : https://cwiki.apache.org/confluence/display/Mahout/Powered+By+Mahout
  26. 26. Software Stack Utilities Lucene/Vectorizer Math Vectors/Matrices/SVD Collections (primitives) Apache Hadoop Recommender Classification Clustering others... Examples Applications
  27. 27. 추천 시스템 (Recommender System) • 사용자의 취향과 선호를 추론해서 관심을 가 질만한 새로운 아이템을 발견하는 시스템 • 적용 예 o 아마존 : 사용자의 구매, 사용행태 분석하여 아이템 추천 o 넷플릭스 : 사용자가 관심을 가질 만한 DVD 추천 o 페이스북 : 사용자와 연결되지 않은 친구를 찾아 추천 o Last.fm : 협업 필터링 방식의 음악 추천 • 실질적인 상업적 가치가 있는 것으로 보고됨
  28. 28. Mahout 추천 시스템 • 대용량 처리 가능한 협업 필터링 (Collaborative Filtering) 프레임워크 • 추천 방식 o user/item-based CF o model-based RS • online, offline 지원 o 오프라인 추천기의 경우 하둡을 지원한다. • 다양한 유사도 측정방식 지원 o Cosine, LLR, Tanimoto, Pearson, others
  29. 29. 군집화 (Clustering) • 많은 수의 객체를 여러 개의 유사성이 높은 클러스터 그룹으로 나눈다 • 대용량 데이터로부터 흥미로운 정보를 가진 그룹을 발견할 수 있다 • 활용 예 o 숨겨진 사용자 그룹 발견 o 많은 문서를 이해하기 쉽도록 구조화 o 사이트 로그를 분석해 공통적인 사용 패턴 발견 o 위치 기반 정보를 이용한 그룹 발견
  30. 30. Mahout 군집화 • Document 레벨 o 유사도 개념에 기반하여 그룹핑 o K-Means, fuzzy K-Means, Dirichlet, Canopy, Meanshift 제공 o Distance Measures  Manhattan, Euclidean, others • 토픽 모델링 o 말뭉치로부터 주제별로 관련성이 높은 단어를 그룹화 o Latent Dirichlet Allocation
  31. 31. 분류 (Classification) • 어떤 오브젝트가 특정 카테고리에 종속되는지 또는 특정 속성을 포함하는지 결정 • 적용 예 o Yahoo! 메일 서비스의 스팸 필터링 o 구글 피카사는 사진에서 사람의 얼굴 구분이 가능함 o OCR(이미지문자인식)로 개별 글자 구분 o 애플 아이튠즈의 Genius의 음악 파일 분류 • 일반적이지 않은 사용자의 행동 패턴 판별, 사기 적발, 평판 분석, 이탈고객 방지 등에 활용 가능
  32. 32. Mahout 분류 • 새 아이템을 미리 정의된 카테고리에 분류 o 뉴스 : 스포츠, 정치, 연예, ... o 서비스 : 해지, 유지 o 추천 • 구현 o Naive Bayes o Decision Forests o Complementary Naive Bayes o Logistic Regression (Stocastic Gradient Descent)
  33. 33. 기타 알고리즘 • Singular Value Decomposition
  34. 34. 2. 도구 • 데이터를 수학적 개념으로 표현하기 • 객체 간의 비교를 위한 연산 소개 • Mahout 설치 및 활용
  35. 35. Representing Data • Feature Selection o Figure out what features of your data are interesting • Vectorization o Represent the interesting features in an n- dimensional space 출처 : http://www.slideshare.net/danielglauser/machine-learning-with-apache-mahout
  36. 36. Vector • vector == point o 추상적인 관점, 기하학적으로 해석할 필요는 없다 • 순서가 있는 숫자의 리스트 (tuple) o ex) [2.3, 1.55, 0.0] o index : 0 ~ size-1 • 차원(크기, cardinality) • 종종 차원이 백만 정도 되는 벡터를 다뤄야함
  37. 37. Mahout Vector • mahout-math 프로젝트의 org.apache.mahout.math 패키지에 구현 • Dense Vector vs. Sparse Vector o 크기에 비해서 상대적으로 적은 0이 아닌 값들을 갖 는가?
  38. 38. Mahout Vector Implementation • DenseVector o 내부적으로 배열 자료구조를 사용 o 값을 업데이트하거나 접근할 때 빠른 속도가 장점 • RandomAccessSparseVector o 해쉬 테이블 기반의 index-to-value mapping o 배열의 직접 접근 보다는 느리지만 괜찮은 성능 보장 • SequentialAccessSparseVector o 트리 유사 구조 기반의 ordered mapping o 모든 값을 차례로 순회하는 동작 수행에 최적화
  39. 39. 벡터화, 시퀀스 파일 생성 • 사과 더미 군집화 o 특성을 차원에 할당  무게 - 0, 색깔 - 1, 크기 - 2 차원 o 다양한 특성을 십진수 값으로 변환  색깔  크기 o 차원별로 다른 가중치 필요 - 출처 : Mahout in Action
  40. 40. 벡터화, 시퀀스 파일 생성 • SequenceFile o a format from the Hadoop library that encodes a series of key-value pairs o key : WritableComparable (= Comparable) o value : Writable (= Serializable) • Preparing vectors for use by Mahout o VectorWritable : Vector -> SequenceFile o key : 벡터의 이름 o value : 벡터 자체 • 실습 - 출처 : http://www.slideshare.net/danielglauser/machine-learning-with-apache-mahout?from_search=4
  41. 41. Similarity metrics • Data = collection( objects [attributes] ) o Object  = record, item, point, sample, observation, instance o Attribute  property or characteristic of an object  = variable, field, characteristic, feature • Object 간의 유사도 == 두 Vector의 유사도
  42. 42. Similarity metrics • 구현 o org.apache.mahout.cf.taste.impl.similarity • 종류 o Pearson correlation-based similarity o Similarity by Euclidean distance o Cosine measure similarity o Similarity with the Tanimoto coefficient o Simiarity with a log-likelihood test o 등등...
  43. 43. PearsonCorrelationSimilarity • 피어슨 상관 계수는 두 변수간의 관련성을 구하기 위해 보편적으로 이용되며 아래 식으로 계산 • 기본적인 개념은 아래와 같이 나타낼 수 있다 • 상관성을 -1과 1 사이 값으로 측정 o 방향 : 변수들이 어떻게 변하는지 나타낸다 o 크기 : 절대값이 크면 상관 관계가 더 강하다
  44. 44. EuclideanDistanceSimilarity • 직교 좌표계의 점 p = (p1, p2, ..., pn)와 q = (q1, q2, ..., qn) 가 있을 때, 두 점 p, q 사이의 유클리드 거리는 다음과 같 이 정의한다. • 거리는 유사도와 반대되는 개념
  45. 45. UncenteredCosineSimilarity • 벡터의 크기 • 두 벡터의 내적 • 두 벡터 A와 B의 코사인 유사도
  46. 46. TanimotoCoefficientSimilarity • = Jaccard similarity coefficient • sample set의 합집합과 교집합의 크기로 계산 • 두 개의 오브젝트 A, B가 있을 때 (boolean 속성) o M11을 A와 B가 모두 1값의 속성을 가진 속성의 개수 o M00을 A와 B가 모두 0값의 속성을 가진 속성의 개수 o M01을 A는 0값, B는 1값을 갖는 속성의 개수 o M10을 A는 1값, B는 0값을 갖는 속성의 개수
  47. 47. LogLikelihoodSimilarity • 개념적으로는 타니모토 계수 기반의 유사도와 비슷함 • 타니모토계수와의 차이점은 바로 얼마나 우연하게 겹치 지 않을까를 확인하는 것 • 통계 테스트를 통해 두 오브젝트가 닮지 않을 개연성이 낮은지 검사한다. (개연성이 낮을 수록 유사도 높음) • 유사도 결과값은 중첩이 우연이 아닌 확률로 해석 가능 • 완전히 동일한 오브젝트 간에도 유사도가 1이 아님
  48. 48. Distance Measures • 구현 o org.apache.mahout.common.distance • 종류 o Euclidean distance measure o Squared Euclidean distance measure o Manhattan distance measure o Cosine distance measure o Tanimoto distance measure o Weighted distance measure o 등등...
  49. 49. Distance Measures • EuclideanDistanceMeasure • SquaredEuclideanDistanceMeasure • ManhattanDistanceMeasure
  50. 50. Euclidean distance measure • CosineDistanceMeasure • TanimotoDistanceMeasure • WeightedDistanceMeasure
  51. 51. Mahout 설치 • 다운로드 및 압축 해제 $ cd ~ $ wget http://mirror.apache-kr.org/mahout/0.9/mahout- distribution-0.9.tar.gz $ tar xvfz mahout-distribution-0.9.tar.gz $ ln –s mahout-distribution-0.9 mahout
  52. 52. Mahout 설치 • 환경변수 설정 $ vi ~/.bash_profile export HADOOP_HOME=/home/hadoop/hadoop export HADOOP_CONF_DIR=$HADOOP_HOME/conf export JAVA_HOME=/home/hadoop/jdk export MAHOUT_HOME=/home/hadoop/mahout PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$MAHOUT_HOME/bin:$HOME/bin:$ PATH export PATH $ source ~/.bash_profile
  53. 53. Mahout 실습 • 문서 분류기 실습 (Mahout example 참고) # 작업 디렉터리 설정 및 생성 $ WORK_DIR=/tmp/mahout-work-${USER} $ mkdir -p ${WORK_DIR} # 20newsgroups 데이터 다운로드 $ curl http://people.csail.mit.edu/jrennie/20Newsgroups/20news- bydate.tar.gz -o ${WORK_DIR}/20news-bydate.tar.gz # 20newsgroups 데이터 압축 해제 $ mkdir -p ${WORK_DIR}/20news-bydate $ cd ${WORK_DIR}/20news-bydate && tar xzf ../20news-bydate.tar.gz
  54. 54. Mahout 실습 • 문서 분류기 실습# 20newsgroups 데이터 준비 작업 $ rm -rf ${WORK_DIR}/20news-all $ mkdir ${WORK_DIR}/20news-all $ cp -R ${WORK_DIR}/20news-bydate/*/* ${WORK_DIR}/20news-all # 하둡 클러스터에 데이터 업로드 $ hadoop dfs -rmr ${WORK_DIR}/20news-all $ hadoop dfs -put ${WORK_DIR}/20news-all ${WORK_DIR}/20news-all # 시퀀스 파일 생성 $ mahout seqdirectory -i ${WORK_DIR}/20news-all -o ${WORK_DIR}/20news-seq -ow
  55. 55. Mahout 실습 • 문서 분류기 실습 # 생성한 시퀀스 파일을 살펴보기 $ hadoop dfs -text ${WORK_DIR}/20news-seq/part-m-00000 | more $ mahout seqdumper -i ${WORK_DIR}/20news-seq/part-m-00000 -o ./dump # 시퀀스 파일을 벡터로 변환 $ mahout seq2sparse -i ${WORK_DIR}/20news-seq -o ${WORK_DIR}/20news-vectors -lnorm -nv -wt tfidf # 생성된 벡터 시퀀스 파일들 살펴보기. 딕셔너리 파일과 빈도 파일 $ hadoop dfs -text ${WORK_DIR}/20news-vectors/dictionary.file-0 | tail $ hadoop dfs -text ${WORK_DIR}/20news-vectors/frequency.file-0 | tail # 생성된 벡터 시퀀스 파일들 살펴보기. 최종 결과 $ mahout vectordump -i ${WORK_DIR}/20news-vectors/tfidf-vectors/part-r-00000 -o ${WORK_DIR}/20news-vectors/tfidf-vectors/part-r-00000dump
  56. 56. Mahout 실습 • 문서 분류기 실습 # 80:20 비율로 트레이닝, 테스트 데이터 생성 $ mahout split -i ${WORK_DIR}/20news-vectors/tfidf-vectors --trainingOutput ${WORK_DIR}/20news-train-vectors --testOutput ${WORK_DIR}/20news-test-vectors --randomSelectionPct 20 --overwrite --sequenceFiles --method sequential # 제대로 분할 되었는지 건 체크 $ mahout seqdumper -i $WORK_DIR/20news-vectors/tfidf-vectors/part-r-00000 --count $ mahout seqdumper -i /tmp/mahout-work-bt22dr/20news-train-vectors/part-r-00000 --count $ mahout seqdumper -i /tmp/mahout-work-bt22dr/20news-test-vectors/part-r-00000 --count
  57. 57. Mahout 실습 • 문서 분류기 실습 # 나이브베이즈 모델 생성 $ mahout trainnb -i ${WORK_DIR}/20news-train-vectors -o ${WORK_DIR}/model -li ${WORK_DIR}/labelindex -ow -el # 생성된 결과물 중 labelindex 살펴보자 $ hadoop dfs -text ${WORK_DIR}/labelindex
  58. 58. Mahout 실습 • 문서 분류기 실습 # 테스트 데이터로 검증 $ mahout testnb -i ${WORK_DIR}/20news-test-vectors -o ${WORK_DIR}/20news-testing -m ${WORK_DIR}/model -l ${WORK_DIR}/labelindex -ow # 결과 확인 $ hadoop dfs -libjars=$MAHOUT_HOME/mahout-core-0.9-job.jar -text $WORK_DIR/20news-testing/part-m-00000
  59. 59. 3. 군집화 (Clustering) • 군집화 개념 소개 • K-Means Clustering • Canopy Clustering
  60. 60. 군집화 (Clustering) • Cluster o Object 들의 집합 o 비슷한 object끼리 같은 cluster에 묶음 • Clustering Algorithm o 개체(object) 집합을 여러 개의 group 으로 묶는 알고 리즘 • Requirements for Clustering Task o 개체를 벡터로 표현할 feature 를 정의 o 두 개체의 가까운 정도를 측정할 measure를 정의 o 클러스터링을 수행할 알고리즘을 정의
  61. 61. 군집화 (Clustering) • Clustering o Vector distance는 최대한 가깝게 o Cluster distance는 최대한 멀게
  62. 62. K-Means Clustering • 주어진 데이터를 k개의 클러스터로 묶는 알고리즘 • 각 클러스터 센터와 해당 클러스터 내 인스턴스들의 거리 차이의 분 산을 최소화 하는 방식으로 동작 • • 초기 seed는 랜덤하게 선택하여도 반복연산(iteration) 과정에서 어 느 정도 적절한 중심값을 찾아가게 되지만 항상 옳지는 않으므로 canopy와 같은 rough한 알고리즘을 사용하거나 휴리스틱하게 초기 값을 선정함 • 클러스터 수 k와 수렴 임계값을 사용자가 결정해 주어야 하며 모든 데이터는 단 하나의 클러스터에만 소속될 수 있음 • 분산 환경 적용이 쉽다
  63. 63. K-Means Clustering - 출처 : http://en.wikipedia.org/wiki/K-means_clustering
  64. 64. K-Means iterations - 출처 : http://spiderspace.wordpress.com/2012/03/26/mapreduce-in-r/
  65. 65. Hello Clustering : 단순 군집 예제 • K-means 알고리즘 처리 흐름도
  66. 66. Hello Clustering : 단순 군집 예제 • 입력 만들기 o 분석 데이터 준비 과정  데이터 전처리  결과 데이터로 벡터 생성  생성된 벡터를 SequenceFile로 변환 • 실습 o SequenceFile 생성  getPoints() : 입력의 각 점을 Vector로 인코딩  writePointsToSeqFile() : Mahout 입력을 위해 SequenceFile 변환
  67. 67. • 초기 중심 셋 정하기 o 대략적인 군집 중심 예측  실제 응용에서는 사전에 군집에 어디에 위치하는 지 파악하기 힘들다 o 랜덤하게 미리 정의된 k개 만큼 선정 o 군집 중심 예측을 위한 다양한 방법 활용  Canopy Clustering • 실습 o 단순 무식한 방법으로 초기 중심 추정 o 중심점의 반복 계산 과정에서 cetroid가 보정됨 Hello Clustering : 단순 군집 예제
  68. 68. Hello Clustering : 단순 군집 예제 • Mahout 군집 실행 실습 o 입력 파라미터 Option Description input/output (-i/ -o) Overwrite (-ow) output 덮어쓰기 여부 Distance Measure (-dm) Euclidian, Cosine, manhattan, Tanimoto, ... etc Clustering (-cl) "clusteredPoint" 생성 여부 Method (-xm) sequential / mapredcue 수행 방식 선택 numClusters (-k) 원하는 cluster의 수 (integer). 랜덤 생성 Convergence Delta (-cd) 수렴 임계값 (double) Max Iteration (-x) 최대 반복 처리 횟수 (integer) Cluster (-c) 초기 클러스터
  69. 69. Hello Clustering : 단순 군집 예제 • 결과 분석 o 예상했던 결과를 빠르고 정확하게 얻을 수 있다 o 하지만 실제 사례에서는  입력 벡터의 수와 벡터의 차원이 크다  초기 중심점과 K 예측이 어렵다  품질, 성능, 확장성 등의 문제 발생  성능 튜닝과 군집의 품질 평가 필요 • 군집 품질의 주요 결정요인 o Distance Measure
  70. 70. K-Means in MapReduce • Input o Mahout Vectors representing the original content o Either:  A predefined set of initial centroids(e.g. Canopy)  --k - The number of clusters to produce • Iterate o Do the centroid calculation • Clustering Step (optional) • Output o Centroids (as Mahout Vectors) o points for each Centroid(if Clustering Step was taken) - 참조 : http://www.slideshare.net/gsingers/apache-mahout-driving-the-yellow-elephant
  71. 71. MapReduce Iteration • Each Iteration calcuates the Centroids using: o KMeansMapper o KMeansCombiner o KMeansReducer • Clustering Step calcuate the points for each Centroid using: o KMeansClusterMapper - 참조 : http://www.slideshare.net/gsingers/apache-mahout-driving-the-yellow-elephant
  72. 72. KMeansMapper • During Setup: o Load the initial Centroids (or the Centroids from the last iteration) • Map Phase o For each input  Calculate it’s distance from each Centroid and output the closest one • Distance Measures are pluggable o Manhattan, Euclidean, Squared Euclidean, Cosine, others - 참조 : http://www.slideshare.net/gsingers/apache-mahout-driving-the-yellow-elephant
  73. 73. KMeansReducer • Setup: o Load up clusters o Convergence information o Partial sums from KMeansCombiner (more in a moment) • Reduce Phase o Sum all the vectors in the cluster to produce a new Centroid o Check for Convergence • Output cluster- 참조 : http://www.slideshare.net/gsingers/apache-mahout-driving-the-yellow-elephant
  74. 74. KMeansCombiner • A Combiner is like a Map-side Reducer which helps save on IO • Just like KMeansReducer, but only produces partial sum of the cluster based on the data local to the Mapper - 참조 : http://www.slideshare.net/gsingers/apache-mahout-driving-the-yellow-elephant
  75. 75. KMeansClusterMapper • Some applications only care about what the Centroids are, so this step is optional • Setup: o Load up the clusters and the DistanceMeasure used • Map Phase o Calculate which Cluster the point belongs to o Output <ClusterId, Vector> - 참조 : http://www.slideshare.net/gsingers/apache-mahout-driving-the-yellow-elephant
  76. 76. 실전 활용 • Reuters-21578 뉴스 컬렉션 분석 o 기계 학습 연구용으로 광범위하게 쓰이는 데이터 셋 o Reuters newswire에 실린 기사들을 가공하여 생성 o http://www.daviddlewis.com/resources/testcollection s/reuters21578/ o 총 22개의 파일로 구성되어 있으며 각 파일에 약 1000개의 문서가 포함되어 있다 o XML과 비슷한 형식인 SGML 포맷으로 되어있다.
  77. 77. 입력 데이터 표현 • 벡터 공간 모델 (VSM, vector space model) o 텍스트를 벡터화하는 일반적인 방법 • TF(term frequency) 가중치 o 문서에서 단어가 등장한 빈도수 o 빈도수가 높은 불용어로 인해 결과 왜곡됨 • TF-IDF(inverse document frequency) 가중치 o 단순 용어 빈도 가중치를 개선하기 위해 사용 o 용어 빈도에 역문서 빈도를 곱한 것 o DF(해당 단어가 등장한 문서의 수), N(문서 수)
  78. 78. 입력 데이터 표현 • 단어의 독립 문제 o VSM에서는 단어가 곧 차원이므로 단어끼리는 서로 직교성(orthogonal)을 가진다 o 직관적으로 보기에도 많은 경우 단어들이 완전히 독 립적이라고 말하기 어렵다. (e.g. Coca Cola) • 해결 방안 o LSI (latent semantic indexing) o n-gram 연어 + log-likelihood test
  79. 79. 입력 데이터 생성 • Lucene 로이터 파서 o SGML 형식을 텍스트 문서로 변환한다 o Lucene benchmark JAR file에 포함되어 있음 • SequenceFilesFromDirectory o 디렉터리에 속한 텍스트 문서를 SequenceFile 형식 으로 표현한 중간 단계의 문서로 생성한다 o 중간 단계의 SequenceFile에서 key는 문서 ID이며 value는 문서의 텍스트 내용으로 구성한다. • SparseVectorsFromSequenceFiles o SequenceFile 형식의 텍스트 문서를 n-gram이 반영 된 TF 혹은 TF-IDF 가중치의 벡터로 변환한다
  80. 80. 입력 데이터 생성 1 bt22drui-MacBook-Pro:mahout-0.6 bt22dr$ cd $MAHOUT_HOME/examples/ bt22drui-MacBook-Pro:examples bt22dr$ mkdir Reuters bt22drui-MacBook-Pro:Reuters bt22dr$ mv ~/reuters21578.tar.gz ./ bt22drui-MacBook-Pro:examples bt22dr$ tar -xvf reuters21578.tar.gz -C Reuters bt22drui-MacBook-Pro:examples bt22dr$ mvn -e -q exec:java -Dexec.mainClass="org.apache.lucene.benchmark.utils.ExtractReuters" > -Dexec.args="Reuters/ reuters-extracted/" Deleting all files in /Users/bt22dr/Documents/workspace/mahout-0.6/examples/reuters-extracted-tmp bt22drui-MacBook-Pro:examples bt22dr$ cd .. bt22drui-MacBook-Pro:mahout-0.6 bt22dr$ echo $JAVA_HOME /Library/Java/Home bt22drui-MacBook-Pro:examples bt22dr$ bin/mahout seqdirectory -c UTF-8 -i examples/reuters-extracted/ -o reuters-seqfiles ~ 생략 ~ 13/06/04 03:49:53 INFO driver.MahoutDriver: Program took 8271 ms (Minutes: 0.13785) bt22drui-MacBook-Pro:examples bt22dr$ bin/mahout seq2sparse -i reuters-seqfiles/ -o reuters-vectors -ow ~ 생략 ~ 13/06/04 03:51:42 INFO driver.MahoutDriver: Program took 48005 ms (Minutes: 0.8000833333333334)
  81. 81. 입력 데이터 생성 2 • 파라미터 설명 o -a : WhitespaceAnalyzer를 사용해서 공백 단위로 단어를 토큰화한다 o -chunk : 청크 크기를 200MB로 한다. 이 값은 로이터 데이터 처리에 별 다른 영향을 주지는 않는다. 왜냐하면 사전의 크기는 보통 1MB 정도이 기 때문이다. o -wt : tfidf 가중치를 사용한다. o -s : 최소 지원 값으로 5를 사용한다. o -md : 최소 문서 빈도를 3으로 설정한다. o -x : 최대 문서 빈도를 90%로 해서 빈도가 높은 단어를 공격적으로 잘 라낸다 o -ng : n-그램 크기를 2로 해서 유니그램과 바이그램 모두를 생성한다 o -ml : 최소 로그 우도 비율(LLR)을 50으로 설정해서 아주 중요한 바이그 램만 선택한다 o -seq : SequentialAccessSparseVectors 플래그를 설정한다. bt22drui-MacBook-Pro:examples bt22dr$ bin/mahout seq2sparse -i reuters-seqfiles/ -o reuters-vectors-bigram -ow > -a org.apache.lucene.analysis.WhitespaceAnalyzer -chunk 200 -wt tfidf -s 5 -md 3 -x 90 -ng 2 -ml 50 -seq
  82. 82. 입력 데이터 생성 3 • 정규화로 벡터의 품질 향상시키기 o 큰 벡터의 규모를 줄이고 작은 벡터의 크기를 늘리는 과정 o 마하웃에서는 통계학의 p-norm 정규화를 제공한다 o norm power 값 (p)는 벡터에서의 유사도 연산 유형에 의존한다. o 여기서는 Euclidean norm(2-norm) 사용 bt22drui-MacBook-Pro:examples bt22dr$ bin/mahout seq2sparse -i reuters-seqfiles/ -o reuters-vectors-bigram -ow > -a org.apache.lucene.analysis.WhitespaceAnalyzer -chunk 200 -wt tfidf -s 5 -md 3 -x 90 -ng 2 -ml 50 -seq -n 2
  83. 83. Mahout K-Means 실행 • -k 파라미터가 설정되었다면 KmeanDriver 클래스는 초 기 군집 Centroid 디렉터리를 지우고 무작위로 선택한 k 점을 SequenceFile에 쓴다. • 두 종류의 출력 디렉터리 o cluster-n : 각 반복 군집 처리 결과 o clusteredPoints : 최종 군집ID-문서ID 매핑 결과 bt22drui-MacBook-Pro:examples bt22dr$ bin/mahout kmeans -i reuters-vectors/tfidf-vectors/ -c reuters-initial-clusters -o reuters-kmeans-clusters -dm org.apache.mahout.common.distance.SquaredEuclideanDistanceMeasure -cd 1.0 -k 20 -x 20 -cl
  84. 84. Mahout K-Means 결과 확인 • org.apache.mahout.utils.clustering.ClusterDumper 유틸 리티로 결과 확인 • K-Means Clustering의 마지막 iteration 결과와 미리 만들 어둔 사전 파일을 입력으로 받는다 • 결과 예시 bt22drui-MacBook-Pro:examples bt22dr$ bin/mahout clusterdump -dt sequencefile -d reuters-vectors/dictionary.file-* -s reuters-kmeans-clusters/clusters-8-final -b 10 –n 10
  85. 85. Canopy Clustering • 러프한 알고리즘이라 매우 간단하고 빠르지만 의외로 꽤 정확함 • 데이터셋 크기 때문에 다른 군집화 알고리즘에서는 터무니없는 시간이 걸리는 대량의 데이터 셋에서도 빠르게 동작 • 클러스터 개수를 지정하지 않아도 된다 • 각 오브젝트는 하나 이상의 클러스터(Canopy)에 속할 수 있다 • 알고리즘은 고속의 (근사적) 거리 측정방식과 두 개의 거리 임계값(T1 >T2)을 사용한다. • K-means, Hierarchical clustering같은 보다 엄격한 군집화 알고리즘의 전처리 단계에서 자주 사용한다.
  86. 86. Canopy Clustering 1. 전체 point 데이터 셋에서 시작, 랜덤하게 한 point 씩 선택하며 제거해 나간다 2. 선택한 point를 포함하는 새로운 Canopy를 생성하고 2.1. Canopy와의 거리가 T1보다 작은 point들을 해당 클러스터(Canopy)에 추가 2.2. 거리가 T2보다 작으면 데이터셋에서 제거 (기존 Canopy에 충분히 가까우므로 더 이상 고려하지 않음) 3. 이 과정을 나머지 데이터셋에 대해 반복
  87. 87. Mahout Canopy 실행 • Canopy Cluster 실행 • ClusterDumper로 결과 확인
  88. 88. Canopy Clustering • Canopy 군집화 알고리즘 실습 o SimpleCanopyClustering1 (local mode) o SimpleCanopyClustering2 (hadoop)
  89. 89. 군집화 알고리즘 활용 • 서비스 불량 발생 지점 위치 기반 분석 • 각종 시계열 데이터 군집화 • 온라인 쇼핑몰의 고객 군집 분석 • 대량의 문서를 특정 그룹으로 구조화 • 대량의 유전자 정보에서 유사한 기능을 하는 유전자 그룹 찾기 • 서비스 로그 분석을 통해 공통 패턴 발견 • 소셜 네트워크에서 숨겨진 사용자 그룹 발견
  90. 90. 4. 분류 (Classification) • 분류 개념 소개 • Logistic Regression • Naive Bayes Classification
  91. 91. • 각각의 속성 집합 x를 미리 정해진 클래스 레이블 중 하나인 y에 사상(mapping)하는 목표함수(target function) f를 학습하는 작업 • 이진 범주나 명목형 범주를 갖는 데이터 집합을 예측, 서술하는 것에 가장 적합 (순위형 범주에 대해서는 덜 효과적임) 분류(Classification)
  92. 92. 분류(Classification) 출처 : https://www.coursera.org/course/ml
  93. 93. 분류에서 사용하는 핵심 개념 핵심 개념 설명 Model 의사 결정 컴퓨터 프로그램. 분류에서는 훈련 알고리즘의 출력이 모델이다. Training data 훈련 예제 중 목표 변수값으로 라벨을 붙인 일부 데이터. 모델을 생성하는 학습 알고리즘의 입력으로 사용된다. Test data 원천 훈련 데이터의 일부. 목표 변수가 숨겨져 있어 모델의 성능을 평가하는 데 사용한다. Training 훈련 데이터로 모델을 생성하는 학습 과정. 모델은 입력으로 주어진 예측 변수를 이용하여 목표 변수의 예측치를 계산할 수 있다. Training example 학습 알고리즘의 입력으로 사용할 특성으로 구성된 엔티티 Feature 훈련 혹은 새로운 예제의 알려진 특징(characteristic). Variable 특성의 값 혹은 여러 특성들의 함수값을 말한다.(프로그래밍의 변수와는 다른 의미) Record 예제(example)를 저장할 컨테이너. 레코드는 필드들로 구성된다. Field 특성의 값(Variable)을 저장하는 레코드의 한 부분 Predictor variable 분류 모델의 입력으로 사용하도록 선택된 특성. 모든 특성을 사용하지는 않으며, 어떤 특성은 다른 특성의 알고리즘 조합일 수도 있다. Target variable 분류 모델로 추정하려는 특성. 분류 시스템에서 결정하고자 하는 목표인 카테고리 값이다. 출처 : Mahout in Action
  94. 94. 분류시스템의 동작 과정 O X O O 출처 : https://www.coursera.org/course/ml
  95. 95. • Exam Data 분류 실습 (Logistic Regression)
  96. 96. • Donut Data 분류 실습 (Logistic Regression)
  97. 97. • A simple probabilistic classifier based on applying Bayes' theorem with strong (naive) independence assumptions. • Naïve o assumes that the presence or absence of a particular feature is unrelated to the presence or absence of any other feature, given the class variable. Naïve Bayes Classifier
  98. 98. • 조건부 확률 : 사상(사건, event) B에가 발생했다는 조건이 주어졌을 때, 사상 A의 확률을 구하는 경우를 말한다. o 주사위 눈이 3 이하라고 주어졌을 때 주사위 눈이 짝수가 나올 확률 (O) o 9번 연속으로 동전 앞면이 나왔을 때 다음 시도에서 앞면이 나올 확률 (X) o Naïve Bayes Classifier 비만 정상 체중 계 고혈압 20 20 40 정상 혈압 30 80 110 계 50 100 150 표본공간 A A ∩ B B 20명 20명 30명 80명
  99. 99. • SimpleNaiveBayesTraining • SimpleNaiveBayesTest 분류 실습 (Naïve Bayes Classifier)
  100. 100. 5. 추천 (Recommendation) • 추천 시스템 개념 소개 • User-based Collaborative Filtering • Item-based Collaborative Filtering
  101. 101. Brick-and-mortar • 시,공간의 제약이 존재 o 슈퍼마켓 o 교보문고 o 종이 신문 • 전통적인 파레토 법칙을 따름 • 적합한 방식 : 베스트셀러 추천
  102. 102. Online • 시,공간의 제약이 없음(or 약함) o 멜론 o 아마존 o 온라인 뉴스 사이트 • Long-tail 법칙을 따름 • 적합한 방식 : 검색, 개인화 서비스
  103. 103. 등장 배경 • Brick-and-mortar vs. Online • 다양한 사용자들에 대해 구매할 확률이 높 은 아이템들을 찾아내는 것이 중요한 이슈 Off-line On-line 물리적 공간의 제약 물리적 공간 제약 없음 제한된 고객 수 고객 수의 제한 없음 Pareto(80/20) 법칙 Long tail 법칙 개인화 불가능 개인화 가능
  104. 104. 추천 시스템이란? • User-Item Matrix ( = Utility Matrix) • Utility Matrix의 공백을 채우는 것이 추천 시스템의 본질
  105. 105. 추천 시스템 분류 • Recommender System o Content-based RS o Collaborative Filtering  Memory-based • User-based CF • Item-based CF  Model-based • 일반적인 성능 및 결과 비교 Content-based < User-based CF <= Item-based CF < Model-based
  106. 106. 추천 시스템 구축을 위한 정보 • 콘텐츠 기반의 정보 o 상품 자체의 정보에 기반을 둔 키워드나 아이템의 설 명에서 나타나는 구절을 사용 o 아이템 자체의 가치를 측정하지는 못함 (얼마나 인기 있는지) • 협업 기반의 정보 o 사용자들의 의도하지 않은 상호 교류를 기반으로 한 정보 o 아이템에 대한 도메인 지식이 필요 없음 (음악, 도서)
  107. 107. Content-based RS • 아이템 자체의 프로파일에 근거하여 유사도를 측정하고 추천하는 방식 • 특정 속성을 선호하는 사람에게 비슷한 속성을 가진 아이템을 추천 • 가장 직관적인 방법 사용자 아이템 아이템 메타데이터 아이템 메타데이터 구매 업데이트
  108. 108. - 출처 : http://en.wikipedia.org/wiki/Collaborative_filtering Collaborative Filtering
  109. 109. Collaborative Filtering (user-based) • Concept : 나와 비슷한 취향의 사람이 구매한 책 추천 • Flow 1) Data Model 생성 - User와 Item간의 선호도를 matrix로 표현 2) User 간의 유사도 계산 - User가 평가한 공통 Item을 기반으로 User 간 유사도 계산 3) 선호도 예측 및 추천 - Query User 와 유사한 N-Neighbor를 선택하고 - 유사도와 선호도로 계산한 weighted sum이 큰 Item들을 추천
  110. 110. Collaborative Filtering - 출처 : Collaborative Filtering: A Tutorial (William W. Cohen)
  111. 111. 선호(Preference) 데이터 표현 • GenericPreference • a single user ID, item ID, preference value • new GenericPreference(1, 101, 3.0f); • 유효 사용 메모리 o user id : 8 byte long o item id : 8 byte long o preference value : 4 byte float • Java Object overhead o a little overhead * millions of items = a lot of overhead
  112. 112. 선호(Preference) 데이터 집합 표현 • Collection<Preference> or Preference[ ] • PreferenceArray 인터페이스
  113. 113. 선호 데이터 표현 • Mahout 최적화 컬렉션 자료구조 o FastByIDMap o FastIDSet • DataModel o 입력 데이터 저장 및 접근 위한 추상 클래스 o 내부적으로 FastByIDMap, FastIDSet 사용 o 구현  GenericDataModel  FileDataModel  GenericBooleanPrefDataModel
  114. 114. 선호 데이터 설정, 사용
  115. 115. Hello World: 추천 예제 • 입력 데이터 (intro.csv) 아이템 101 아이템 102 아이템 103 아이템 104 아이템 105 아이템 106 아이템 107 사용자 1 5.0 3.0 2.5 사용자 2 2.0 2.5 5.0 2.0 사용자 3 2.5 4.0 4.5 5.0 사용자 4 5.0 3.0 4.5 4.0 사용자 5 4.0 3.0 2.0 4.0 3.5 4.0
  116. 116. Hello World: 추천 예제 • 사용자 유사도 (Tanimoto Similarity) 사용자 1 사용자 2 사용자 3 사용자 4 사용자 5 사용자 1 - 3/4 1/6 2/5 1/2 사용자 2 3/4 - 1/3 3/5 2/3 사용자 3 1/6 1/3 - 1/3 3/7 사용자 4 2/5 3/5 1/3 - 2/3 사용자 5 1/2 2/3 3/7 2/3 - 이웃 1 이웃 2 사용자 2 사용자 5 사용자 1 사용자 5 사용자 5 사용자 2 사용자 5 사용자 2 사용자 2 사용자 4
  117. 117. Hello World: 추천 예제 • 선호도 예측 및 추천 (사용자 3)
  118. 118. Hello World: 추천 예제 • 컴포넌트 관계도 o DataModel :  데이터 연산을 위해 모든 선호 정보를 저장하거나 접근하도록 한다 o UserSimilarity :  두 사용자가 얼마나 유사한지를 판단하는데 사용할 연산 혹은 metrics 제공 o UserNeighborhood :  주어진 사용자와 가장 유사한 사용자 그룹 제공 o Recommender :  모든 컴포넌트를 활용하여 사용자에게 아이템 추천
  119. 119. Hello World: 추천 예제 • 실습 (RecommenderIntro.java) • 결과 분석
  120. 120. 추천 시스템 활용 • 그룹 렌즈 데이터 셋 • 사용자 기반 추천 vs. 아이템 기반 추천 • 실습
  121. 121. Collaborative Filtering (item-based) • http://www.slideshare.net/srowen
  122. 122. Recommender (MapReduce ver.)
  123. 123. 실험적인 추천기 • SVD 기반 추천 • 선형보간법 이용 • 군집 기반 추천
  124. 124. SVD 기반 추천 • 개별 아이템의 사용자 선호 영역을 더 일반적이고 적은 수의(장르 같은) 특성으로 축약하는 차원 리덕션 효과 o 10억 개의 개인의 음악 평가 -> 100만 개의 장르에 대한 평가 o 콜벳 vs. 카마로 -> 쉐보레 스포츠카 • UV decomposition o n 사용자와 m 아이템을 가진 (n x m) utility Matrix M이 있을 때 o (n x d) 행렬 U : 사용자를 d-차원 feature space로 모델링 o (m x d) 행렬 V : 아이템을 d-차원 feature space로 모델링 o UVT ~= M인 두 matrix로 행렬을 분해
  125. 125. SVD 기반 추천
  126. 126. SVD 기반 추천
  127. 127. Graph 분석 플랫폼 • Hadoop 특성 o shared-nothing architecture o intermediate file 사용 • 한계점 o Iteration이 많이 필요하거나 o Aggregation 특성을 갖지 않는 연산 o Datanode 간 데이터 교환이 필요한 알고리즘 => Pregel!! (Giraph)
  128. 128. Q&A
  129. 129. TODO • 평가 • 튜닝, 최적화 • 대용량 • 실전 응용

×