ML 🐼/수학 ☑️

[머신러닝+선형대수] 상관관계와 코사인 유사도

Dobby98 2023. 11. 16. 17:18

통계와 머신러닝에서 가장 근본적이면서 중요한 분석 방법은 

상관관계를 분석하는 것이다

 

상관관계를 살펴보기 위해서는 상관계수를 구하는 방법이 있다

상관계수는 -1 부터 +1까지의 범위로 표현할 수 있는데

+1은 완벽한 양의 상관관계를 나타내며, -1은 완벽한 음의 상관관계를 나타낸다.

0의 경우 선형관계가 없음을 의미한다. 

 

1. 피어슨 상관계수

상관계수를 구하는 방법에는 피어슨 상관계수가 있다.

우선 상관계수는 -1~+1에 존재해야하기 때문에 정규화가 필요하다

피어슨 상관계수에서 정규화는 2가지 방법이 적용된다

 

| 각 변수의 평균 중심화 |

A 벡터와 B 벡터의 상관계수를 구하려고하는데 A와 B의 단위가 다르다면 -1과 +1사이로 표현할 수 없을 것이다

이를 위해서 우리는 평균 중심화를 이용한다

 

말로 설명하면 직관적인 이해가 되지 않지만

쉽게 말해서 각 벡터의 평균을 빼주어서 정규화 하는 방식이다.

즉, A벡터집합에 속하는 원소들을 A벡터의 평균으로 빼주는 방식이다

 

| 벡터 노름 곱으로 내적을 나누기 |

이 분할 정규화는 측정 단위를 제거하고 상관계수 최대 크기를 |1|로 조정한다

 

이를 조금더 통계용어로 표현하면 다음과 같은 단계로 구성된다

 

피어슨 상관계수를 수식으로 나타내면 다음과 같다

이때 변수를 벡터로 바꾸어 생각해보면 수식은 아래와 같이 변경할 수 있다

이때

은 평균 중심화된 X를 의미한다


2. 코사인 유사도

선형관계만이 두 변수간의 유사성을 판단하는 유일한 방법은 아니다

다른 방법으로 코사인 유사도가 존재한다

 

코사인 유사도에 대한 공식은 단순히 내적의 기하하적 공식으로 코사인 항을 구한 것이다

이때 식을 위 피어슨 상관계수와 비교해보면 매우 유사한것을 확인할 수 있다

다른점은 평균중심화가 빠졌다는 것이다

 

즉, 코사인 유사도에는 첫번째 정규화가 적용되어 있지 않다

따라서 같은 벡터가 입력으로 주어지고 피어슨 상관계수와 코사인 유사도를 구했을때

값이 달라질 수 있다 (물론 같을 수 있다 -> 단위가 같다면)

 

예를 들어서 [0, 1, 2, 3]과 [100,101,102, 103]의 피어슨 상관계수는 1이다 

즉, 한 쪽 변수가 변하는 대로 다른 변수도 똑같이 변하기 때문이다

 

하지만 코사인 유사도는 0.808로 나온다 

동일한 숫자 척도가 아니어서 완벽한 상관관계는 아니다

 

이를 비교하기 위한 더 간단한 예시가 있다

 

[-50 ~ 50]까지 offset을 만들고 [0,1,2,3]으로 구성된 vector를 만들어보자

그리고 loop를 돌면서 순차적으로 offset 하나를 vector에 더해줘서 또 다른 vector 2를 구성해주자

ex) 첫번째의 경우 -50 + [0,1,2,3] = [-50, -49, -48, -47] = v2가 된다

또한 loop과정 마다 만들어진 vector2와 원래 vector의 피어슨 상관계수와 코사인 유사도를 구해서 비교해보자

 

미리 보여주기 전에 피어슨 상관계수는 항상 1이 나온다 둘 벡터모두 원소가 증가하기 때문이다

하지만 코사인 유사도는 다르게 나타난다.

왜냐하면 두 벡터 사이의 척도가 다르기 때문이다

 

이를 그래프로 시각화 하면 아래와 같다

 

참고로 numpy로 직접 구현한 피어슨 상관계수와 코사인 유사도 코드는 아래와 같다

#피어슨 상관계수
def corrcoef(v1, v2):
  v1m = v1 - np.mean(v1)
  v2m = v2 - np.mean(v2)

  return np.dot(v1m, v2m) / (np.linalg.norm(v1m) * np.linalg.norm(v2m))

#코사인 유사도
def cosin_sim(v1, v2):
  return np.dot(v1, v2)/(np.linalg.norm(v1)*np.linalg.norm(v2))

'ML 🐼 > 수학 ☑️' 카테고리의 다른 글

[선형대수] 기저  (0) 2023.05.25
Entropy, CrossEntropy 그게 뭔데?  (0) 2023.03.27
베이즈 정리(Bayes' theorem)  (0) 2023.01.03