google_adsense2


데이터를 받으면 제일 먼저 해야할 일 by 메타샤워

모든 데이터에 행해야할 분석


1. 데이터 내용, 구조, 타입을 파악해야한다. 
R에서 dplyr::glimpse() 함수가 유용하다. 
데이터 구조를 파악할 수 있는 str(),
데이터의 맨 앞 부분을 보여주는 head(), 데이터의 맨 뒷 부분을 보여주는 tail()

2. 데이터의 요약 통계량을 summary로 파악한다.

3. 결측치가 있는지 summary로 살펴 본다.

4. 무작정 시각화를 해본다.
plot(), piars()를 돌려보면 좋다.
데이터의 관측치가 많을 때는 실행시간이 길으니 dplyr::sample_n() 함수등을 사용해 표본화 해본다.
데이터의 변수가 10개 이상많을 때에는 10열씩 구분하여 살펴보는것도 유용하다

데이터 분석에서 나오는 수학 - 코사인 유사도 by 메타샤워


코사인 유사도


벡터공간 ( Vector Space ) 는 우리가 가지고 있는 데이터를 좌표계에 표현하기 위해 나온 개념이다.
음성데이터든, 이미지 데이터든, 문서 데이터든 해당 데이터가 가지고 있는 특성을 x,y축 또는 x,y,z,,,, 축 등
다차원 좌표계에 표시할수 있다면 해당 좌표들 끼리의 유사도를 계산할수가 있게 된다.

예를들어 2개의 특성으로 구분된 데이터라고 가정을 해보자. 
문서데이터를 예로 들어 문서에 들어있는 단어는 오로지 A라는 단어와 B 라는 단어 2가지로 이루어져 있다면
문서들이 A라는 단어와 B라는 단어를 얼마나 많이 또는 적게 가지고 있느냐에 따라서 A축과 B축의 좌표계로 문서들을 표시 할수 있다.
변수가 A, B 두개 밖에 없어 2차원 좌표계에 표시하였지만 
데이터가 가지고 있는 특성에 따라서 3차원 10차원 200차원의 좌표계에 표시해야 할 수 있다.

좌표계에 표시된 데이터들의 벡터내적값을 이용하면 데이터들 끼리의 유사도를 구할수 있다.
유클리디안 거리는 단순히 좌표에 표시된 데이터들 간에 거리를 비교하여 
거리가 멀면 유사도가 적고 가까우면 유사한 데이터라고 판별하지만
코사인 유사도 같은 경우에 문서의 단어들이 적게 있지만 A가 3개 B가 3개 있는 문서와 문서의 단어가 많이 있지만 
A가 300개 B가 300개 있는 데이터는 서로 유사한 데이터라고 볼수 있다. 
이런 문서간의 좌표의 실제 거리는 굉장히 멀겠지만 벡터내적을 구하면 두 데이터는 같은 데이터로 결과가 나오게된다.

이렇게 데이터가 가지고 있는 특성의 비율로서 데이터의 유사도를 측정하는 방법이 코사인 유사도이다.



코사인유사도는 벡터내적 공식을 이용하여 구할수 있다.

먼저 벡터내적 공식이다.


vector6.png

vector4.png

여기서  A벡터의 절대값인 vector5_copy1.png 은 A벡터의 크기를 말한다. 
벡터는 방향과 크기를 가진 물리량인데 방향성을 소거하고 크기만을 표현할때 이렇게 표현한다.
vector5_copy1.png벡터의 크기를 구하는 방법은 
vector8.png

 A벡터가 가지고 있는 요소들의 제곱의 합에 루트를 씌워주면 A벡터의 크기가 된다. 
원점으로 부터 A벡터까지의 거리 공식을 이용하면 되는것이다.


여기서 벡터의 내적공식을 다른 풀이형태로 표현할수 있다. (코사인 제 2법칙으로 증명할수 있지만 안하겠다. )

vector7.png

위 공식으로 A벡터와 B벡터의 내적값을 요소로서 구할수 있다. 
코사인 내적으로 실시하면 방향이 없는 스칼라 물리량이 구해진다. 


벡터의 내적을 표현하는 2가지 공식으로서 두 벡터간의 코사인 값은 아래와 같이 정리 할수 있다.

vector10.png


이제 쉽게 말해 보자 

두 데이터간의 코사인 유사도는 각 데이터들의 값을 모두 제곱하여 더한 값에 루트를 씌운 곱들을 분모로 하여 
서로 간 같은 축에 있는 데이터들끼리 곱한것에 총합을 분자로 하면 
두 데이터간의 코사인 값을 구할수 있다. 


그럼 이제부터 이 두 벡터간의 코사인값이 어떻게 유사도를 나타낼수 있는지 이야기 해보아야 한다.

두 벡터가 얼마나 유사한가는 두 벡터의 좌표를 이용하여 유클리디안 거리 측정으로 구할수 있다.
하지만 이것은 각도에의해 구한것이 아닌 그저 거리로만 계산한 방법이다.
벡터의 성질인 크기와 방향을 이용하여 유사도를 측정하는 방법으로 가장 많이 사용되는 방법은 코사인값을 활용하는 방법이다.

코사인은 -1 부터 1까지의 값을 갖는다.
코사인 각이 0이라면 두 벡터가 가장 가깝게 되고 유사도는 1이 된다. 
코사인 각이 180이라면 두 벡터가 가장 멀리 있게 되고 유사도는 -1이 된다.

이런 이유로 단순히 코사인 각만 가지고도 유사도를 측정할수 있게 되는것이다.


하지만 제일 위에서 언급했듯이 이것은 벡터의 방향성만 가지고 유사도를 측정한것이기 때문에 벡터가 가지고 있는 크기에 대해서는
논하지 않았다. 아래 그림을 보자. 

20080829_000036.png

 위 그림에서 왼쪽의 A벡터와 B벡터는 오른쪽 A벡터와 B벡터간 유사도는 코사인 유사도로는 갖게 나온다.
물론 유클리디안 거리는 다르게 나오겠지만 말이다.

서로 다른 값을 가지지만 사잇각이 같다는 이유로 같은 유사로라고 판단하는것이 문제가 될수도 있다. (물론 안될수도 있다. )

그래서 이를 보완하기 위해서 하나의 벡터를 또 다른 벡터에 투영하여 얻어진 길이로 유사도를 구할수도 있다.

20080829_000408.png

투영한 길이는 두백터의 크기와 방향에 따라서 모두 영향을 받는 길이이기 때문에 
투영한 길이가 길면 더욱 유사한 값이라고 판단할수 있고 
투영한 길이가 짧은 덜 유사한 값이라고 판단할수 있다.

사잇각이 좁으면 좁을수록 투영한 길이는 길것이고 벡터의 크기가 비슷해야 투영한 길이도 비슷하게 나올것이기 때문이다.

그럼 이 투영한 길이를 어떻게 구하는지 알아야 한다.
코사인 쎼타의 값은 투영한 길이 / A벡터의 길이 이기 때문에

투영한 길이는 이렇게 표현할 수 있다. 
20080829_001625.png


이렇게 되면 비교되는 각 벡터간 투영된 길이가 나오는데 백터마다 기준 벡터값이 다 다르기 때문에 마지막으로 
투영된 길이를 비교된는 벡터의 크기로 나누어주어 비교 가능하도록 정규화 하는 작업이 필요하다.

이제 사용예를 들어보자


3개의 문서가 주어져 있다.

A
B
C
D
D1
3
2
0
2
D2
1
2
3
0
D3
2
2
2


D1 문서에는 A라는 단어가 3개, B라는 단어가 2개, C라는 단어가 0개, D라는 단어가 2개
D2 문서에는 A라는 단어가 1개, B라는 단어가 2개, C라는 단어가 3개, D라는 단어가 0개
D3문서에는 A라는 단어가 2개, B라는 단어가 2개, C라는 단어가 2개, D라는 단어가 2개

이상태에서 Q문서가 주어지고 Q문서는 D1, D2, D3 문서중 어떤 문서와 가장 유사도가 높은지 구해보자.

Q문서는 A문자가 1개 나오고 B문자가 5개 나오는 문서이다.

Q = { 1, 5, 0, 0 }

풀이법 1 코사인 유사도를 구한다. )
20080829_003246.png


이로 보어 D1 문서가 Q문서와 가장 유사하다고 볼수 있다.



풀이법 2 투영된 길이의 비율을 구한다. ) 

Q문서의 벡터를 각 문서 D1, D2, D3 벡터에 투영된 길이를 각각 R1, R2, R3 이라고 보고 다음과 같이 계산할수 있다.

20080829_004306.png

이 계산된 각 투영된 길이를 기준 문서로 나누어 투영된 길이의 비율을 구한다.
각각 투영된 비율을 r1, r2, r3 이라고 하고 계산해보자.

20080829_004636.png

이렇게 투영된 길이의 비율로 비교를 하니 D2 문서가 Q문서와 가장 유사하다고 결과가 나왔다.




물론 투영된 길이의 비율로 유사도를 측정하는것이 코사인 값만 가지고 유사도를 측정하는것 보다 더 정확할수는 있겠지만
데이터의 성격상 단위 벡터로만 벡터들이 생성된다거나 벡터의 크기 자체가 별로 중요하지 않다고 판단하기도 하고
대용량 데이터를 처리해야 하는 경우 계산 속도의 향상을 위해 코사인 유사도만 가지고 유사도를 측정 할수도 있다.




















데이터 분석에서 나오는 수학 - 유클리디안 거리 by 메타샤워

유클리디안 거리

아래 그림에서 초록색 이 유클리드 거리이다.





유클리디안 거리는 유클리드라는 수학자가 고안해낸 이론이다.
최대공약수를 계산하는 유클리드 호제법으로 유명한 분이다.

유클리디안 거리의 다른이름으로 L2 Distance 라고도 한다.


2차원 평면에 두점이 ( x1, y1 ) 과 ( x2, y2 )로 표현되어있다고 가정한다면, 실제 이 두점간의 거리는 피타고라스 정리를 이용하여
쉽게 구할수 있다. 이것을 3차원 4차원 등등 다차원까지 확장시킨것이 유클리디안 거리라고 생각하면 되겠다.

예를 들어 n 차원에 있는 두점 P와 Q가 있다고 생각하자
P =  ( p1, p2, p3, p4 ,,,, pn )
Q = ( q1, q2, q3, q4 ,,,, qn )
이 두점간의 거리를 유클리디안 거리로 표현한다면 아래 처럼 표현할수 있다. 








그닥 어렵지 않은 수식이다.



** 추가적으로 유클리디안 거리 공식으로 계싼을 하면 거리의 최대값이라는 게 없어서 뭔가와 비교할 수가 없다.
그래서 이 거리를 0 ~ 1 사이의 값으로 갖도록 정규화? 하는 방법을 아래와 같이 사용하기도 한다.

유클리디안 거리 공식을 이용해 얻은 거리의 값을   Ed 라고 한다면

    20080830_153328.png

이렇게 표현한다면  가장 가까운 경에는 1에 가까울 것이고 멀수록 0에 가까운 값을 갖게 된다.




사용 예

유클리디안 거리 공식은 실제거리를 잴때도 사용되는 공식이지만, 인공지능 분야에서 두 가지 객체의 속성 값이 여러개일경우
이들 속성값들의 의한 두 개체 사이의 유사도를 구할때도 자주 사용한다.

예를 들어서 문서간 유사도를 생각해보자.

3개의 문서가 있고 각 문서는 A, B, C , D라는 단어로만 구성이 되어있다고 하자

D1 문서에는 A가 3번, B가 2번, C가 0번, D가 2번 등장했다
D2 문서에는 A가 1번, B가 2번, C가 3번, D가 0번 등장했다
D3 문서에는 A가 2번, B가 2번, C가 2번, D가 2번 등장했다



A
B
C
D
D1
3
2
0
2
D2
1
2
3
0
D3
2
2
2


이는 A,B,C,D 라는 4차원 공간에서 D1, D2, D3 이라는 3개의 좌표로 배치하는 것과 똑같이 생각할 수 있다.
참고로 위와같이 정의하는 것을 보고 단어들의 출현빈도 (Term Frequency)를 가중치로 (Weigh)로 하여 문서를 논리적으로 정의한것이다 라고 말한다.

이제 누군가가 "새로운 Q 문서가 있는데 이 문서에는 A가 1번 B가 5번 나온 문서인데 이문서가 가장 유사한 문서는 무엇이냐?" 
라고 물어본다면 이제 유클리디안 거리 공식을 사용 할 수 있다.

Q =  {  1, 5, 0, 0 }

라고 Q를 정의하고 그리고 Q와  각 D1,D2,D3 문서와의 거리를 구하여 가장 가까운 거리를 가지는 문서가 답이 될것이다.

euclidean_distance_2.png


 즉 D1 문서가 가장 유사한 문서라고 판단할 수 있다.








********* 참고 ***********


지금 포스트에서 설명한 유클리디안 거리는 L2 거리라고 표현하고
이전 장에 설명한 맨하탄 거리는 L1 거리라고 표현한다고 했다.

그럼 여기서 Lm 거리라는 것에 대해서 얘기 할수 있다. ( 이때  m은 숫자이다. )
m으로 이름을 딴 이유는 이 거리에 대해서 제시한 헤르만 민코프스키의 m을 딴것이다.

두점 A와 B간 Lm거리의 공식은 다음과 같다.

20080830_152005.png


여기서 m이 1이면 맨하탄 거리와 같고 m이 2라면 유클리디언 공식과 같다.



데이터 분석에서 나오는 수학 - 맨하탄 거리 by 메타샤워


맨하탄 거리

아래 그림에서 빨간색, 노란색, 파란색이 모두 맨하탄 거리 이다.






19세기 수학자 헤르만 민코프스키가 고안한 용어 이다.

다른 말로는 택시거리, L1 거리, 시가지 거리 라고도 한다.

이렇게 불리는 이유는 미국의 맨하탄 시가지의 건물이 바둑판 형식으로 아주 잘 정비 되어 있어 이름을 땄다.

두 점의 거리를 측정해야 하는데 단순 직선 거리가 아닌 중간중간 건물도 있고 도로도 있는 상황에서 건물을 가로질러 갈수 없고

도로로만 이동해야 할경우 적합한 계산 방법이다.



계산 하는 공식도 간단한다.

d_{1}(\mathbf {p} ,\mathbf {q} )=\|\mathbf {p} -\mathbf {q} \|_{1}=\sum _{i=1}^{n}|p_{i}-q_{i}|,

2차원 평면위에 두점 (x1, y1)  과  (x2, y2)사이의 맨하탄 거리를 계산한 공식은

20080830_143650.png


그저 x끼리 차의 절대값,  y끼리 차의 절대값이다.

이것을 3차원 공간에서 생각한다면 두점은 ( x1, y1, z1 ) , ( x2, y2, z2 )로 표현될것이고 이 두사이의 맨하탄 거리는

20080830_143755.png

위와 같이 될것이다.

이것을 모든 차원에 대해서 종합하면
20080830_144333.png

이렇게 표현 할수 있다.


이걸 지도로 보면 더 명확하다.
갈수 있는 거리로 갔을때 건물을 가로지르지 않고 각 노드들을 그대로 커쳐 도로로만 갔을때의 최단 거리라고 생각하면 되겠다.






1 2 3 4 5 6 7 8 9 10 다음


google_adsense