본문 바로가기
통계학 | 수학/Math for ML

[벡터] 벡터의 연산 , 벡터의 노름 , 벡터의 내적 ( 정사영 ) , 유사도

by 채채씨 2021. 8. 8.
728x90
반응형
  • 벡터는 숫자를 원소로 가지는 배열 또는 리스트를 말하며 공간에서의 한 점을 나타낸다. (다만, 1차원상에서 한 점은 스칼라(숫자)로 본다)

원점으로부터 상대적 위치 표현

 

  • 벡터를 이루는 원소의 개수를 벡터의 차원이라 한다.
  • 이번 포스팅에서는 벡터의 곱셈, 덧셈, 뺄셈 연산과 벡터의 노름, 벡터의 내적을 알아볼 것이다.

 

1. 벡터와 스칼라 곱셈


벡터에 스칼라를 곱하면 벡터의 방향은 변하지 않고 길이가 스칼라배만큼 변한다.

 

 

  • 0 < scalar < 1 : 벡터의 길이를 줄임
  • scalar > 1 : 벡터의 길이를 늘림
  • scalar < 0 : 벡터를 반대방향 전환시킴

 


 

2. 벡터의 덧셈과 뺄셈 및 성분곱


두 벡터 x, y의 차원 수가 같으면 각 성분끼리 곱셈과 뺄셈 및 성분곱이 가능하다. 이 연산의 의미를 이해하기 위해 덧셈 x + y를 생각해보면, x + y는 벡터 x로부터의 상대적인 거리를 나타낸다는 것을 알 수 있다. 즉 원점을 벡터 x로 옮기는 것이다.

 

벡터간 덧셈과 뺄셈

 

 

벡터간 성분곱

 


 

3. 벡터의 노름


■ 노름의 정의와 종류

벡터의 노름은 원점으로부터의 거리를 뜻한다.

임의의 d차원 벡터와 노름 기호


위의 임의의 d차원인 벡터 x의 노름을 구해보자. 벡터의 노름을 구하는 방식은 L1-노름L2-노름이 있다.

(1) L1-노름: 각 성분의 변화량의 절댓값을 모두 더한다.

L1-노름

 

def l1_norm(x): 
	x_norm = np.abs(x) 
	x_norm = np.sum(x_norm) 
	return x_norm



(2) L2-노름: 피타고라스 정리에 의한 유클리드 거리(최단)를 계산한다.

def l2_norm(x): 
	x_norm = x * x
    x_norm = np.sum(x_norm) 
    x_norm = np.sqrt(x_norm) 
    return x_norm



■ 노름의 종류에 따라 달라지는 기하학적 성질

노름의 종류에 따라 거리의 정의가 달라지므로 그에 따른 기하학적 성질도 달라진다. 아래의 예시를 보자.


원은 원점으로부터 같은 거리만큼 떨어져있는 점들의 집합이므로 L1-노름과 L2-노름으로 거리를 구할 수 있다. 거리에 대한 정의가 다름으로 인해 서로 서로 다른 원의 모양을 가지게 된다. 머신러닝에서 L1-노름은 주로 Robust학습이나 Lasso회귀에서 사용하고 L2-노름은 Laplace근사, Ridge회귀에서 사용한다.


■ 노름의 활용 - 두 벡터 사이의 거리와 각도

(1) 두 벡터 사이의 거리

두 벡터 사이의 거리는 벡터의 뺄셈을 이용하여 계산한다. L1-노름과 L2-노름 두 방식으로 계산할 수 있으며 두 값은 다른 결과를 가질 수 있다.

 



(2) 두 벡터 사이의 각도

L2-노름과 벡터의 내적을 이용하여 두 벡터가 이루는 을 구할 수 있다.


벡터의 내적 정의로부터 코사인세타 값은 다음과 같다.


두 벡터를 이루는 각 세타는 두 벡터의 내적을 각각의 노름의 곱으로 나누어준 후 arccos을 적용하여 구할 수 있다. 주의할 점은 분모에서 각 벡터의 노름은 L2-노름으로 계산해야 한다는 것이다.

def angle(x, y): 
	v = np.inner(x, y) / (l2_norm(x) * l2_norm(y)) 
    theta = np.arccos(v) 
    return theta


※ 벡터의 내적은 바로 아래에서 상세하게 다룬다.

 


 

4. 벡터의 내적


■ 정의



■ 내적의 성분 표현

 

$$\vec{a} \cdot \vec{b}=|\vec{a}||\vec{b}| \cos \theta=\sum_{i=1}^{d} a_{i} b_{i}$$

 

이 증명은 제2코사인법칙을 통해 할 수 있다.

 



■ 벡터의 내적의 기하학적 의미


벡터의 내적은 기하학적으로 한 벡터를 다른 벡터 위로 정사영시킨 길이와 그 다른 벡터의 길이를 곱한 것을 의미한다.
위의 예시에서는 벡터 a를 벡터 b로 정사영시켰는데 그 반대도 가능하다.


벡터의 내적은 유사도(similarity)측정에 사용 가능하다. 벡터의 유사도를 측정을 위한 세가지 접근법은 다음과 같다.


● 벡터의 유사도 측정 방법

· 벡터의 거리를 고려한 유사도 계산: 각 벡터의 좌표를 통해 유클리디안 거리를 측정하여 구할 수 있다.

· 벡터의 방향을 고려한 유사도 계산: 코사인값을 활용한다. 코사인 각이 0도이면 유사도가 1이되고, 180도이면 유사도는 -1이 된다.

· 벡터의 크기와 방향 모두를 고려한 유사도 계산: 하나의 벡터를 또 다른 벡터에 정사영한 길이를 이용하여 구할 수 있다. 정사영된 길이는 벡터의 크기와 방향으로 계산되므로 벡터의 두 가지 성질을 모두 반영한 유사도를 구하게 된다. 정사영된 길이가 짧을 수록 유사도가 낮고 길 수록 유사도가 높다. 벡터 사이의 각이 작을 수록 정사영된 길이가 길어지고 각이 클 수록 정사영된 길이가 짧아지는 것을 생각하면 이해하기 쉽다.


여기서 세 번째 유사도는 벡터의 내적, 즉 정사영 원리를 이용하여 측정할 수 있다.

728x90
반응형

댓글