만족

[데이터사이언스] 유사도(Similarity) 본문

[데이터사이언스] 유사도(Similarity)

데이터사이언스 Satisfaction 2021. 10. 22. 08:12

Similarity(유사도)

두 데이터가 얼마나 유사한지를 수치적으로 나타낸다.

 

[0,1] 사이의 값으로 나타나며, 두 데이터가 높을수록 1에 가까운 수로 표현된다.

 

Dissimilarity(비유사도)

두 데이터가 얼마나 다른지를 수치적으로 나타낸다

 

0이상의 값으로 나타나며 완전히 같을 경우 0으로 표현된다.

(상한값은 데이터에 따라 다르다)

 

Similarity vs Dissimilarity: Data type

데이터 타입에 따라 유사도와 비유사도를 표현하는 방법이 다르다.

 

p, q를 각 데이터의 attribute라고 하자.

 

  Dissimilarity Similarity
Nominal (순서가 없는 데이터; 직업) 같으면 0, 다르면 1 같으면 1, 다르면 0
Ordinal (순서가 있는 데이터; 옷 사이즈) 각 데이터를 0부터 n-1까지 매핑하고
|p-q|/(n-1)로 계산한다
1- dissimilarity값으로 계산한다.
1- (|p-q|/(n-1))
Interval or Ratio (수치 데이터; 몸무게) |p-q| 세 가지 방식으로 정의된다.
1) -|p-q|= -dissimilarity
2) 1/(1+ |p-q|)= 1/(1+ dissimilarity)
3) 1- (d- min(d))/(max(d)- min(d))
(단 d는 dissimilarity)

이처럼 데이터 타입에 따라 유사도와 비유사도를 구하는 방법이 다르다는 것을 알 수 있다.

 

Minkowski Distance(민콥스키 거리) in Vector

 

민콥스키 거리는 유클리드 거리의 일반화이다.

 

민콥스키 거리는 다음과 같이 구할 수 있으며,

n은 차원(attribute 갯수), p는 파라미터를 의미한다.

 

p=1일땐 맨하탄 거리,

p=2일땐 유클리드 거리(2차원공간에서 점과 점사이의 거리)

p=infinite일땐 수프리멈 거리(n차원공간 중에서 가장 큰 축의 길이; max(|xi-yi|))가 된다.

 

 x1(1,1), x2(2,2) 에 대해 p=1,2,..infinite 값을 구해보면 위와 같이 몬콥스키 거리를 구할 수 있다.

 

p가 작을수록 distance값이 커지고, p가 클수록 각 축의 최대길이에 가까워짐을 확인할 수 있다.

 

Dissimilarity about distance

위 거리값을 이용해 비유사도 계산도 사용할 수 있다.

 

distance(p,q)는 p와 q의 거리를 의미하므로,

유사하지 않다면(멀리 떨어져 있다면) 거리값은 크게 나타나고

유사하다면 거리값은 작게 나타날 것이다.

(distance(p,q)= dissimilarity(p,q); d(p,q)로 표현)

 

Dissimilarity(Distance) operation rules

 

1. d(p,q)= 0이면 p=q이다. (역인 p=q이면 d(p,q)=0도 성립한다)

2. d(p,q)= d(q,p)가 성립한다 (교환법칙)

3. d(p,r)<= d(p,q)+ d(q,r)이 성립한다 (피타고라스 법칙)

 

Similarity rules

similarity(p,q)= s(p,q)로 쓰기로 하자.

 

1. s(p,q)=1이면 p=q이다. (역인 p=q이면 s(p,q)=1도 성립한다)

2. s(p,q)= s(q,p) 이다. (교환법칙)

 

Similarity about Binary Vector

 

두 개의 값(0,1)을 가지는 데이터로 이루어진 벡터의 유사도를 계산할 수도 있다.

 

감기에 걸린 사람;p= (1,0,0,0.0,0,0)

독감에 걸린 사람;q= (0,0,0,00,0,1)

에서 1은 true, 0은 false를 의미한다고 하자.

 

M00(p=q=0), M01(p=0, q=1), M10(p=1, q=0), M11(p=q=1) 값을 계산하면 다음과 같다.

=> 해당 케이스에 속하는 쌍의 갯수를 센다

M00= 5

M01= 1

M10= 1

M11= 0

 

이 때 Simple Matching은 다음과 같이 계산된다.

Simple Matching= (M11+ M00)/(M00+ M01+ M10+ M11)
전체 갯수 중에서 모두 참이거나 모두 거짓인 케이스의 비율

따라서 이 경우 SM= (0+5)/(5+1+1+0)= 0.71..이 된다.

 

그러나 위의 데이터에서 감기에 걸린 사람과 독감에 걸린 사람 데이터가 높은 유사도(SM= 0.71)가 있다고 보기는 어렵다.

감기에 걸린 사람;p= (1,0,0,0)

독감에 걸린 사람;q= (0,0,0,1)

 

따라서 SM이 아닌 다른 방법을 사용해볼 수 있다.

 

Jaccard Coefficients는 다음과 같이 계산한다.

Jaccard Coefficients= M11/(M01+ M10+ M11)
Simple Matching에서 모두 거짓인 값들은 제외하고 계산

J를 계산해보면 0/(1+1+0)= 0이 나온다. 

 

따라서 이 경우 Jaccard Coefficients를 유사도로 사용하는 것이 더 합리적이다.

 

Documents in Vector Space Model

document(문서)는 수천개의 특정 attribute로 이루어져 있고,

각각은 특정 단어/문단의 출현 빈도로 기록된다.

 

  야구 축구
문서1 3 3 0
문서2 0 3 3

위와 같이 N개의 문서를 벡터 데이터로 나타낼 수 있다.

(각 데이터값은 해당 문서의 특정 단어(attribute)출현 횟수)

 

이 때 차원값은 단어의 수(attribute의 갯수)가 된다.

 

Cosine Similarity

CS(d1, d2)= d1*d2/||d1||*||d2||로 구할 수 있다.

 

코사인 유사도는 두 벡터의 벡터곱과, 절댓값을 씌운 각 벡터의 벡터곱의 비율로 나타난다.

 

다음 document를 벡터로 표현해 보자.

  야구 축구
문서1 3 3 0
문서2 0 3 0

 

V(d1)= (3,3,0)

V(d2)= (0,3,3)

 

d1*d2= (3*0+ 3*3+ 0*0)= 9

||d1||= sqrt(3*3+ 3*3+ 0*0)= 4.24

||d2||= sqrt(0*0+ 3*3+ 0*0)= 3

 

CS(d1, d2)=9/(4.24*3)= 0.71로 문서1과 문서2의 코사인 유사도는 0.71이다.

 

유클리드 거리 vs 코사인 유사도

가령 문서1과 문서1의 내용을 복사해 한 권으로 합친 문서 2가 있다고 해 보자.

 

  야구 축구
문서1 3 3 0
문서2 6 6 0

 

이제 d1= (3,3,0), d2= (6,6,0)이 된다.

 

유클리드 거리d(d1,d2)는  ||d1||=4.24 이 될 것이고

코사인 유사도는 d1*d2= 36, ||d1||= 4.24..., ||d2||= 8.48...이므로, CS(d1,d2)= 1가 되어

 

실제 두 책의 내용이 양에 차이만 있지 동일한 내용을 담고 있으므로

이 때는 유사도를 관찰할 때 코사인 유사도가 더 적합하다.

 



Comments