20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (similarity&clustering)

35
빅데이터 실전기술 IT가맹점개발팀 이태영 2014.12.16 8번째 스터디 유사도 및 군집화

Upload: tae-young-lee

Post on 15-Apr-2017

222 views

Category:

Data & Analytics


7 download

TRANSCRIPT

Page 1: 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)

빅데이터실전기술

IT가맹점개발팀이태영

2014.12.16

8번째 스터디

유사도 및 군집화

Page 2: 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)

빅데이터분석기술

이미지출처 : http://www.saltlux.com/bigdata-analysis-overview/

Page 3: 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)

빅데이터분석기술이번시간에살짝다룰기술도메인

이미지출처 : http://www.saltlux.com/bigdata-analysis-overview/

Page 4: 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)

빅데이터분석기술유사도매칭과군집화

1. 유사도 매칭 (Similarity Matching)

• 알려진 데이터에 기반해 비슷한 개체를 찾아냄

• 유사도 매칭은 고객에게 제품을 추천할 때 사용하는 가장 인기 있는 방법 중 하나

• 선호하거나 구매한 제품의 관점에서 현재 고객과 유사한 사람을 찾아낼 수 있음

• 분류, 회귀 분석, 군집화와 같은 여러 데이터 마이닝 작업을 해결하기 위한 기반

2. 군집화 (Clustering)

• “우리 고객들이 자연스럽게 그룹으로 묶이는가?”

• 특정 목적이 없는 상태에서 유사도에 따라 개체를 묶는다.

• 군집화는 문제 영역의 기초 조사를 수행할 때 어떤 그룹이 자연스럽게 만들어지는지 알림

• 그룹이 존재한다면 다른 데이터마이닝 작업을 해볼 필요가 있다는 것을 의미

Page 5: 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)

유사도매칭유클리디안거리(Euclidean distance)

(𝑥𝐴, 𝑦𝐴)

(𝑥𝐵, 𝑦𝐵)𝑥𝐵 − 𝑥𝐴

𝑦𝐵 − 𝑦𝐴

distance(A,B) =

(𝑥𝐵 − 𝑥𝐴)2+(𝑦𝐵 − 𝑦𝐴)

2

B

A

m차원공간

distance(A,B) = (𝑑1,𝐴 − 𝑑1,𝐵)2+(𝑑2,𝐴 − 𝑑2,𝐵)

2+(𝑑3,𝐴 − 𝑑3,𝐵)2+⋯+ (𝑑𝑚,𝐴 − 𝑑𝑚,𝐵)

2

Page 6: 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)

유사도매칭K-NN(Nearest neighbor) 알고리즘

• 가장 가까운 k개의 객체들 중 가장 많은 특징으로 판단

• k = 3의 경우, 타겟 객체는 녹색으로 판단

• k = 7의 경우, 타겟 객체는 파랑으로 판단

Target Object

K=3

K=7

Page 7: 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)

유사도매칭K-NN(Nearest neighbor) 알고리즘

• 노찬*은 타켓마케팅을 통해 모바일쿠폰 발급에 참여할 고객인가?

이름 나이 소득 카드수 참여

노찬* 27 300 2 ?

김진* 27 300 3 X

최진* 28 300 2 O

박동* 35 370 20 X

이태* 33 320 15 O

유진* 31 310 12 O

김성* 32 350 17 X

유용* 32 320 18 O

Page 8: 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)

유사도매칭K-NN(Nearest neighbor) 알고리즘

• 노찬*은 타켓마케팅을 통해 모바일쿠폰 발급에 참여할 고객인가?

참고 : http://www.highcharts.com/구현 : http://jsfiddle.net/seen/0602nb3a/

목표 객체 참여 불참

Page 9: 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)

유사도매칭K-NN(Nearest neighbor) 알고리즘

목표 객체

참여

불참

𝑑 𝐴, 𝐵 = (𝑥𝐵 − 𝑥𝐴)2+(𝑦𝐵 − 𝑦𝐴)

2+(𝑧𝐵 − 𝑧𝐴)2

Page 10: 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)

유사도매칭K-NN(Nearest neighbor) 알고리즘

이름 나이 소득 카드수 참여 유클리디안 거리

노찬* 27 300 2 O

김진* 27 300 3 X 1.00

최진* 28 300 2 O 1.00

박동* 35 370 20 X 72.72

이태* 33 320 15 O 24.60

유진* 31 310 12 O 14.70

김성* 32 350 17 X 52.44

유용* 32 320 18 O 26.10

• 3-NN 일 경우

Page 11: 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)

𝑠𝑐𝑜𝑟𝑒 𝑐, 𝑁 =

𝑦∈𝑁

𝑤 𝑥, 𝑦 × [𝑐𝑙𝑎𝑠𝑠 𝑦 = 𝑐 ]

유사도매칭K-NN(Nearest neighbor) 알고리즘

• 다수결 투표

𝑤 𝑥, 𝑦 =1

𝑑𝑖𝑠𝑡(𝑥, 𝑦)2

• 유사도 반영 투표 (Similarity-Moderated Voting)

𝑐 𝑥 = argmax 𝑠𝑐𝑜𝑟𝑒(𝑐, 𝑛𝑒𝑖𝑔ℎ𝑏𝑜𝑟𝑠 𝑥 )

𝒏𝒆𝒊𝒈𝒉𝒃𝒐𝒓𝒔 𝒙 는 x 객체의최근접이웃 k개반환, 𝐚𝐫𝐠𝒎𝒂𝒙는 score의최대값을반환

w()는 x 와 y 간의유사도에기반한가중치함수이므로, 유클리디안거리제곱의역수가사용

Page 12: 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)

유사도매칭K-NN(Nearest neighbor) 알고리즘

• 거리에 따라 미치는 영향이 다르다.

이름 나이 소득 카드수 이벤트참여 거리 유사도비중(w) 기여도

노찬* 27 300 2 ?

김진* 27 300 3 X 1.00 1.000000 0.49793266

최진* 28 300 2 O 1.00 1.000000 0.49793266

박동* 35 370 20 X 72.72 0.000189 9.41628E-05

이태* 33 320 15 O 24.60 0.001653 0.000823029

유진* 31 310 12 O 14.70 0.004630 0.002305244

김성* 32 350 17 X 52.44 0.000364 0.000181066

유용* 32 320 18 O 26.10 0.001468 0.000731179

𝑤 𝑥, 𝑦 =1

𝑑𝑖𝑠𝑡(𝑥, 𝑦)2

𝑎𝑙𝑙 𝑝𝑟𝑜𝑏. = 1

Page 13: 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)

유사도매칭K-NN(Nearest neighbor) 알고리즘

• 노찬* 고객이 7-NN에서 참여할 확률은 50.18%

이름 나이 소득 카드수 이벤트참여 거리 유사도비중(w) 기여도

노찬* 27 300 2 ?

김진* 27 300 3 X 1.00 1.000000 0.49793266

최진* 28 300 2 O 1.00 1.000000 0.49793266

유진* 31 310 12 O 14.70 0.004630 0.002305244

이태* 33 320 15 O 24.60 0.001653 0.000823029

유용* 32 320 18 O 26.10 0.001468 0.000731179

김성* 32 350 17 X 52.44 0.000364 0.000181066

박동* 35 370 20 X 72.72 0.000189 9.41628E-05

Page 14: 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)

유사도매칭두객체간유사도 : Jaccard Similarity

1. Jaccard Similarity Coefficient

• JSim (𝐴, 𝐵) =𝐴∩𝐵

𝐴∪𝐵

• 두 데이터의 교집합 크기를 합집합 크기로 나눈 것

∴ JSim (𝐴직원, 𝐵직원) = 𝐴∩𝐵

𝐴∪𝐵= 3

8= 0.375

2. Jaccard Distance

• Jaccard𝛿 (𝐴, 𝐵) = 1- JSim (𝐴, 𝐵)=𝐴∪𝐵 − 𝐴∩𝐵

𝐴∪𝐵

• 1에서 Jaccard 유사도를 뺀 값

∴ J𝛿 (𝐴직원, 𝐵직원) = 1-3

8= 0.625

이름 A직원 B직원

전산 전공 1 0

석사 학위 0 1

개발 가능 1 1

C언어 1 1

자바 1 0

파이썬 0 1

스칼라 1 0

하둡 1 1

Page 15: 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)

유사도매칭두객체간유사도 : Jaccard Similarity

• 내컴퓨터에서 Jaccard 유사도를이용한 mp3 노래 검색

1. 내 컴퓨터에서 mp3 파일 리스트 추출하여 mp3_list.txt 저장

2. 리스트를 읽어 2글자씩 분리(bigram)하여 mp3_bigram.txt 저장

3. 사용자가 입력한 파일명과 유사도를 계산하여 측정

4. 객체간 Bigram 유사도가 높은 순으로 파일명을 정렬하여 보여준다.

import osdef search(dirname):

flist = os.listdir(dirname)for f in flist:

next = os.path.join(dirname, f)if os.path.isdir(next):

search(next)else:

process(next)

def process(filename):ext = os.path.splitext(filename)[-1]if ext == '.mp3':

music_name = filename.split("\\")[-1].replace(" ","")+"\n"f.write(music_name )print music_name

f = open("mp3_list.txt","w")search("I:/MUSIC")

f.close()

mp3_list.txt 추출 스크립트

Page 16: 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)

유사도매칭두객체간유사도 : Jaccard Similarity

• 내컴퓨터에서 Jaccard 유사도를이용한 mp3 노래 검색

2. N-gram으로 2글자씩 분리(bigram)하여 mp3_ngram.txt에 저장

3. 사용자가 입 력한 파일명과 mp3_ngram.txt의 유사도를 계산하여 측정

4. Bigram 단어별 유사도가 높은 순으로 파일명을 정렬하여 보여준다.

//파일리스트를 받아서 bigram 파일로 출력 (컴파일)public void compile(String input, String output) throws Exception{

br=new BufferedReader(new FileReader(input));bw=new BufferedWriter(new FileWriter(output));

String line=null;StringBuilder sb=new StringBuilder();while( (line = br.readLine()) != null){

String musicName = line.split(".mp3")[0];

/* 앞으로 이동하면서 2개 문자를 출력 */for(int i=0;i<musicName.length();i++){

if(i < musicName.length()-1){sb.append(musicName.substring(i, i+2));sb.append(",");

}}sb.deleteCharAt(sb.length()-1);/* 마지막 , 는 제거 */

System.out.println(sb.toString());bw.write(line+":"+sb.toString()+"\n"); // [파일명:bigram결과] 출력sb.setLength(0);// StringBuilder 초기화

}br.close();bw.close();

}

Page 17: 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)

유사도매칭두객체간유사도 : Jaccard Similarity

• 내컴퓨터에서 Jaccard 유사도를이용한 mp3 노래 검색

3. 사용자가 입력한 쿼리와 mp3_ngram.txt의 유사도를 계산하여 측정

4. Bigram 단어별 유사도가 높은 순으로 파일명을 정렬하여 보여준다.

// Jaccard 유사도public double getSimilarity(String query, String data){

query=query.replaceAll(“ “, “”);StringBuilder sb = new StringBuilder();

Set<String> querySet = new HashSet<String>();Set<String> dataset = new HashSet<String>();

//query Set 구성for(int i=0;i<query.length();i++){

if(I < query.length() -1){querySet.add(query.subsequence(I, i+2).toString());

}}

//music Set 구성String musicBiGram[] = data.split(“,”);for(String word : musicBiGram){

dataSet.add(word);}

// Guava 라이브러리 이용Set<String> intersection = Sets.intersection(querySet, dataSet);Set<String> union = Sets.union(querySet, dataSet);

return intersection.size() / (double)union.size();}

Page 18: 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)

유사도매칭두객체간유사도 : Jaccard Similarity

• 내컴퓨터에서 Jaccard 유사도를이용한 mp3 노래 검색

4. Bigram 단어별 유사도가 높은 순으로 파일명을 정렬하여 보여준다.

public void search(String query) throws Exception{BufferedReader br = new BufferedReader(new FileReader(bigramFile));HashMap<String, Double> JaccardSim = new HashMap<String, Double>();

String music=null;while( (music=br.readLine()) != null ){

String filename= music.split(":")[0];String title = music.split(":")[1];double sim = this.getSimilarity(query, title);

if(sim > 0){JaccardSim.put(filename, sim);

}}

//sorting HashMap, Hashtable by values in JavaMap<String, Double> sortedSim = sortByValues(JaccardSim);Set<String> keySet = sortedSim.keySet();for(String key: keySet){

System.out.println("[유사도] "+sortedSim.get(key) +" [파일명]"+key);}

br.close();}

Page 19: 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)

유사도매칭두객체간유사도 : Jaccard Similarity

• 내컴퓨터에서 Jaccard 유사도를이용한 mp3 노래 검색

1. 내 컴퓨터에서 mp3 파일 리스트 추출하여 mp3_list.txt 저장

2. 리스트를 읽어 2글자씩 분리(bigram)하여 mp3_bigram.txt 저장

3. 사용자가 입력한 파일명과 유사도를 계산하여 측정

4. 객체간 Bigram 유사도가 높은 순으로 파일명을 정렬하여 보여준다.

public static void main(String args[]) throws Exception{MP3Bigram bi=new MP3Bigram();//bi.compile("mp3_list.txt", "mp3_bigram.txt");bi.setBigramFile("mp3_bigram.txt");bi.search("처음 사랑 타이밍");

}

[유사도] 0.23076923076923078 [파일명]버스커버스커-사랑은타이밍.mp3[유사도] 0.1875 [파일명]020버스커버스커-사랑은타이밍.mp3[유사도] 0.17647058823529413 [파일명]016-버스커버스커-사랑은타이밍.mp3[유사도] 0.125 [파일명]버스커버스커-처음엔사랑이란게.mp3[유사도] 0.1111111111111111 [파일명]02첫사랑.mp3[유사도] 0.10526315789473684 [파일명]008버스커버스커-처음엔사랑이란게.mp3[유사도] 0.1 [파일명]004-버스커버스커-처음엔사랑이란게.mp3[유사도] 0.1 [파일명]01-눈사랑.mp3[유사도] 0.1 [파일명]20사랑이야.mp3[유사도] 0.09090909090909091 [파일명]22전쟁의사랑.mp3[유사도] 0.07142857142857142 [파일명]068.여행-타이푼.mp3

Page 20: 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)

군집화(클러스터링)K-Means 알고리즘

• K는 데이터들 중에서 찾아내려는 군집의 수

1. k개의 임의 위치에 클러스터 중심 할당

2. k개의 클러스터 중심이 바뀌지 않을 때까지 반복 :

① 모든 객체들은 k개 클러스터 중심과 거리 계산

② 계산된 객체는 가장 가까운 k 클러스터로 포함

③ 각각의 k 클러스터에 포함된 클러스터 중심을 재계산

Page 21: 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)

군집화(클러스터링)K-Means 알고리즘

이름 나이 소득

노찬* 27 300

김진* 27 310

최진* 28 300

유진* 31 310

이태* 33 320

유용* 32 320

김성* 32 350

박동* 35 370

280

290

300

310

320

330

340

350

360

370

380

25 27 29 31 33 35 37

나이/소득

Page 22: 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)

군집화(클러스터링)K-Means 알고리즘

class WorkerInfo{Double age; // 나이Double salary; // 급여Integer k; // 해당 k 클러스터 번호public WorkerInfo(){}public WorkerInfo(Double age, Double salary, Integer k) {

this.age = age;this.salary = salary;this.k = k;

}

public WorkerInfo(Integer age, Integer salary, Integer k) {this.age = (double)age;this.salary = (double)salary;this.k = k;

}public Double getAge() {

return age;}public void setAge(Double age) {

this.age = age;}public Double getSalary() {

return salary;}public void setSalary(Double salary) {

this.salary = salary;}public Integer getK() {

return k;}public void setK(Integer k) {

this.k = k;}

}

이래저래 구현하고 보니

약 180 줄의 자바코드

소스 : https://drive.google.com/folderview?id=0B-3PNr5L-_VhNWxwODZ0Tko5aGs&usp=sharing

Page 23: 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)

군집화(클러스터링)K-Means 알고리즘

이름 나이 소득

노찬* 27 300

김진* 27 310

최진* 28 300

유진* 31 310

이태* 33 320

유용* 32 320

김성* 32 350

박동* 35 370

[9]김진*과 1의 거리 : 5.153882032022076[9]박동*과 2의 거리 : 10.111874208078342[9]유용*과 0의 거리 : 0.5[9]노찬*과 1의 거리 : 5.153882032022076[9]이태*과 0의 거리 : 0.5[9]유진*과 1의 거리 : 5.706356105256663[9]최진*과 1의 거리 : 5.006246098625197[9]김성*과 2의 거리 : 10.1118742080783420, <32.5,320.0>1, <28.25,305.0>2, <33.5,360.0>

[9]김진*과 2의 거리 : 6.25[9]박동*과 0의 거리 : 10.111874208078342[9]유용*과 2의 거리 : 5.153882032022076[9]노찬*과 1의 거리 : 0.5[9]이태*과 2의 거리 : 5.482928049865327[9]유진*과 2의 거리 : 5.006246098625197[9]최진*과 1의 거리 : 0.5[9]김성*과 0의 거리 : 10.1118742080783420, <33.5,360.0>1, <27.5,300.0>2, <30.75,315.0>

Page 24: 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)

군집화(클러스터링)K-Means 알고리즘

280

290

300

310

320

330

340

350

360

370

380

25 26 27 28 29 30 31 32 33 34 35 36

나이/소득

[9]김진*과 2의 거리 : 6.25[9]박동*과 0의 거리 : 10.111874208078342[9]유용*과 2의 거리 : 5.153882032022076[9]노찬*과 1의 거리 : 0.5[9]이태*과 2의 거리 : 5.482928049865327[9]유진*과 2의 거리 : 5.006246098625197[9]최진*과 1의 거리 : 0.5[9]김성*과 0의 거리 : 10.1118742080783420, <33.5,360.0>1, <27.5,300.0>2, <30.75,315.0>

[9]김진*과 1의 거리 : 5.153882032022076[9]박동*과 2의 거리 : 10.111874208078342[9]유용*과 0의 거리 : 0.5[9]노찬*과 1의 거리 : 5.153882032022076[9]이태*과 0의 거리 : 0.5[9]유진*과 1의 거리 : 5.706356105256663[9]최진*과 1의 거리 : 5.006246098625197[9]김성*과 2의 거리 : 10.1118742080783420, <32.5,320.0>1, <28.25,305.0>2, <33.5,360.0>

280

290

300

310

320

330

340

350

360

370

380

25 26 27 28 29 30 31 32 33 34 35 36

나이/소득

Page 25: 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)

군집화(클러스터링)K-Means 알고리즘

280

290

300

310

320

330

340

350

360

370

380

25 26 27 28 29 30 31 32 33 34 35 36

나이/소득

[9]김진*과 1의 거리 : 5.153882032022076[9]박동*과 2의 거리 : 10.111874208078342[9]유용*과 0의 거리 : 0.5[9]노찬*과 1의 거리 : 5.153882032022076[9]이태*과 0의 거리 : 0.5[9]유진*과 1의거리 : 5.706356105256663[9]최진*과 1의 거리 : 5.006246098625197[9]김성*과 2의 거리 : 10.1118742080783420, <32.5,320.0>1, <28.25,305.0>2, <33.5,360.0>

얘는 왜 빨간 것이 아닌

파란 것에 속하는 걸까?

X, Y 값들의 단위 차이로 인한 착시 현상

X (나이) – 28, 29, 30, … , n

Y (급여) – 280, 290, 310, … , n*10

Page 26: 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)

군집화(클러스터링)K-Means 알고리즘

280

290

300

310

320

330

340

350

360

370

380

25 26 27 28 29 30 31 32 33 34 35 36

• 새로운 객체는 가장 가까운 중심점을 가진 클러스터 K로 분류

• 새로운 객체을 포함된 클러스터의 중심은 변경 되므로 재계산 <끝>

Page 27: 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)

군집화(클러스터링)K-NN, K-Means 알고리즘단점

1. K-NN, K-Means 단점

• In Memory-based 알고리즘

• 모든 객체들 간 거리 계산으로 인한 부하 발생

• 빅데이터처리에 불리

2. K-Means 단점

• K-Means는 초기 중심점 설정이 최종 분류에 큰 영향을 끼침

• 평균값 계산시 이상치(Outlier) 데이터가 미치는 영향이 크다.

• 클러스터링 단위로 거리값을 이용하여 군집 형태가 ‘원‘ 형태로

원에 속하지 못하는 데이터는 외면 받음

Page 28: 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)

군집화(클러스터링)빅데이터추천시스템에서는MIN-HASH 알고리즘대세

1. MIN-HASH 알고리즘

• Google News Personalization: Scalable Online Collaborative Filtering (2007)

• 다른 데이터라도 동일한 해쉬 값이 발생 (충돌) 고의적으로 발생시킨다면?

• 두 객체가 가까운 거리에 있을 수록 해쉬 값 충돌 확률을 높이자!

• 차원이 축약된 자카드 거리와 원 객체들의 자카드 거리는 확률적 비슷

• ℎ_𝑚𝑖𝑛 𝐴 : A 집합의 요소들을 해쉬 함수로 축약한 뒤 가장 작은 값을 추출

· Jaccard Similarity (𝐴, 𝐵) =𝐴∩𝐵

𝐴∪𝐵

· P ℎ_𝑚𝑖𝑛 𝐴 = ℎ_𝑚𝑖𝑛(𝐵) = P ℎ 𝐴 ∪ 𝐵 in ℎ 𝐴 ∩ 𝐵 ) = 𝐴∩𝐵

𝐴∪𝐵

∵ P ℎ_𝑚𝑖𝑛 𝐴 = ℎ_𝑚𝑖𝑛(𝐵) = Jarcard Similarity (𝐴, 𝐵)

출처 : http://robertheaton.com/2014/05/02/jaccard-similarity-and-minhash-for-winners/

Page 29: 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)

군집화(클러스터링)MIN-HASH 알고리즘

1. 클러스터 ID 생성 (p개해쉬 함수선정)

• 대상 객체가 가지는 요소들을 ℎ𝑝(𝑥) 함수로 이용하여 계산

이분법의 참(1)/거짓(0) 기록일 경우

ℎ𝑝 𝑥 = 𝑎𝑥 + 𝑏 mod 𝑁

• ℎ𝑝(𝑥) 로 계산된 요소들의 해쉬값들 중 가장 작은 값이 min ℎ𝑎𝑠ℎ 𝑝(𝐴)

• p번 min ℎ𝑎𝑠ℎ𝑝(𝐴) 계산의 결과 값들을 이어붙이면 GROUP ID 생성

• p 개수가커질 수록정확도(precision)는 커지나재현률(recall)은 떨어짐

2. 위과정을 q번을 반복하면, 클러스터 ID는 최대 q개가생성

• 한명의 사용자가최대 q개의 다른그룹에 속할수 있음

• 각각의 사용자들이 확률적으로 유사한 그룹에 묶이게 됨

Page 30: 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)

군집화(클러스터링)MIN-HASH 알고리즘

1. 사용자들의업종별 사용내역 MIN-HASH 클러스터링

• 해쉬 함수 선정 (p=2, q=2)

• [q=1, p=1] ℎ1 𝑥 = 3𝑥 + 5 mod 17

• [q=1, p=2] ℎ2 𝑥 = 5𝑥 + 2 mod 23

• [q=2, p=1] ℎ3 𝑥 = 𝑥 + 7 mod 11

• [q=2, p=2] ℎ4 𝑥 = 7𝑥 + 3 mod 13

• 사용자 업종별 사용 내역

고객번호 업종코드 사용내역

1000001 4005 4096 4097 4098 4099 7061 7062 8200 8500 9000

1000002 4096 4097 4098 7062 8200 9000

1000003 4098 4099 7061 7062 8200 8500

1000004 4048 4049 4098 4099

1000005 4005 4096 8500 9000

1000006 4501 7061 7062 8200 9999

1000007 4056 4096 4100 4200 4300 4500

1000008 4500 4501 4502 4600 4700 4800

1000009 4910 7062 8200 9999

Page 31: 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)

군집화(클러스터링)MIN-HASH 알고리즘

1. 사용자들의업종별 사용내역 MIN-HASH 클러스터링

• [q=1, p=1] ℎ1 𝑥 = 3𝑥 + 5 mod 17

• [q=1, p=2] ℎ2 𝑥 = 5𝑥 + 2 mod 23

고객번호 업종코드 사용내역

1000001 1 2 5 8 11 6 9 6 5 9

1000002 2 5 8 9 6 9

1000003 8 11 6 9 6

1000004 11 14 8 11

1000005 1 2 5 9

1000006 10 6 9 6 14

1000007 1 2 14 8 2 7

1000008 7 10 13 1 12 6

1000009 13 9 6 14

고객번호 업종코드 사용내역

1000001 17 12 17 22 4 2 7 16 21 14

1000002 12 17 22 7 16 14

1000003 22 4 2 7 16 21

1000004 2 7 22 4

1000005 17 12 21 14

1000006 13 2 7 16 18

1000007 19 12 9 3 20 8

1000008 8 13 18 2 19 13

1000009 11 7 16 18

0002

0001

고객번호 1000001의GROUP ID 00010002

Page 32: 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)

군집화(클러스터링)MIN-HASH 알고리즘

1. 사용자들의업종별 사용내역 MIN-HASH 클러스터링

• [q=1, p=1] ℎ1 𝑥 = 3𝑥 + 5 mod 17

• [q=1, p=2] ℎ2 𝑥 = 5𝑥 + 2 mod 23

• [q=2, p=1] ℎ3 𝑥 = 2𝑥 + 8 mod 11

• [q=2, p=2] ℎ4 𝑥 = 7𝑥 + 3 mod 13

고객번호 q=1 그룹 ID

1000001 00010002

1000002 00020007

1000003 00060002

1000004 00080002

1000005 00010012

1000006 00060002

1000007 00010003

1000008 00010002

1000009 00060007

고객번호 q=2 그룹 ID

1000001 00000002

1000002 00010004

1000003 00000002

1000004 00000005

1000005 00010002

1000006 00010004

1000007 00020003

1000008 00010000

1000009 00050001

그룹ID 고객번호

000000021000001

1000003

00000005 1000004

00010000 1000008

00010002

1000001

1000008

1000005

00010003 1000007

000100041000002

1000006

00010012 1000005

00020003 1000007

00020007 1000002

00050001 1000009

000600021000003

1000006

00060007 1000009

00080002 1000004

Page 33: 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)

군집화(클러스터링)MIN-HASH 알고리즘

그룹ID 고객번호

000000021000001

1000003

00010002

1000001

1000008

1000005

000100041000002

1000006

000600021000003

1000006

고객번호 업종코드 사용내역

1000001 4005 4096 4097 4098 4099 7061 7062 8200 8500 9000

1000002 4096 4097 4098 7062 8200 9000

1000003 4098 4099 7061 7062 8200 8500

1000004 4048 4049 4098 4099

1000005 4005 4096 8500 9000

1000006 4501 7061 7062 8200 9999

1000007 4056 4096 4100 4200 4300 4500

1000008 4500 4501 4502 4600 4700 4800

1000009 4910 7062 8200 9999

• MIN-HASH 클러스터링 특징

1. 확률 기반한 군집이므로 정확률보다 재현률에 더 의존

2. 군집 이후 각 고객간의 유사도 계산이 포함된다면 정확률 향상

3. 하둡을 이용한 빅데이터를 분류할 때

• Mapper에게 각 객체들의 q번의 클러스터 ID 계산

• Reducer에게 클러스터 ID별로 정렬 후 저장

Page 34: 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)

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_profile2 3 # Get the aliases and functions4 if [ -f ~/.bashrc ]; then5 . ~/.bashrc6 fi7 8 # User specific environment and startup programs9

10 export JAVA_HOME=$HOME/java11 export HADOOP_HOME=$HOME/hadoop12 export PYTHON_HOME=$HOME/python13 export MAHOUT_HOME=$HOME/mahout14 15 PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PYTHON_HOME/:$MAHOUT_HOME/bin16 17 export PATH

Page 35: 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)

Q&A