[AI] 벡터

Madeline👩🏻‍💻·2022년 12월 16일
0

AI study

목록 보기
4/6
post-thumbnail

0. what is vector?

  • 벡터는 숫자를 원소로 가지는 리스트 / 배열
x = [1,7,2]
x = np.array([1,7,2])

세로 : 열
가로 : 행 벡터

1. 벡터 표현

벡터는 보통 numpy 의 array로 표현한다.
=> 행 벡터의 차원

  • 벡터는 공간에서 한 점을 나타낸다.
    1차원 공간에서의 벡터 = 숫자
    2차원 공간에서의 벡터 = 좌표평면 값 (x,y)
    ...
    n차원 공간 = n개의 축을 가지는 좌표 상 한 점 = 벡터

=> 벡터는 원점으로부터 상대적 위치를 표현한다.

2. 벡터 특성

1) 스칼라곱

  • 벡터에 숫자를 곱해주면, 길이만 변한다.
    스칼라 곱
    : 1보다 큰 수를 곱해주면 길이가 늘어나고, 1보다 작은 수를 곱하면 길이가 줄어든다.
  • 0보다 작으면 반대 방향이 된다.

2) 벡터 연산

  • 벡터끼리 같은 모양을 가지면 덧셈, 뺄셈을 계산할 수 있다.
    => 다른 모양인 벡터끼리의 연산은 에러가 난다.

  • 벡터끼리 같은 모양을 가지면 성분곱을 계산할 수 있다.
    (Hadamard product)

x = np.array([1,7,2])
y = np.array([5,2,1])

x+y
#array([6,9,3])
x*y
#array([5,14,2])
x-y
#array([-4,5,1])

3) 공간 상에서의 벡터 연산

  • 두 벡터의 덧셈은 다른 벡터로부터 상대적 위치이동을 표현한다.

기존 벡터 x: x+0
두 벡터의 덧셈: x+y : (0,0) -> y -> y+x
원점을 y로 옮김

뺄셈도 마찬가지이다!
-x를 더한다고 생각하면 똑같음

3. 벡터의 노름

norm = 노름
: 원점에서부터의 거리

  • L1-노름은 각 성분의 변화량의 절대값을 모두 더한다.

def l1_norm(x):
	x_norm = np.abs(x)#절댓값
    x_norm = np.sum(x_norm)
    return x_norm
def l2_norm(x):
	x_norm = x*x
    x_norm = np.sum(x_norm)
    x_norm = np.sqrt(x_norm)#제곱근
    return x_norm
  • 왜 다른 노름을 소개하나?
    => 노름의 종류에 따라 기하학적 성질이 달라진다.

  • 머신러닝에서는 각 성질들이 필요할 때가 있으므로, 둘 다 사용한다.
  • L1norm: Robust 학습, Lasso 회귀
  • L2norm: Laplace 근사, Ridge 회귀

4. 두 벡터 사이의 연산

1) 두 벡터 사이의 거리

  • L1, L2 노름을 이용해 두 벡터 사이의 거리를 계산할 수 있다.

두 벡터 사이의 거리를 계산할 때는 벡터의 뺄셈을 이용한다.

||y-x|| = ||x-y||

2) 두 벡터 사이의 각도

:L2 norm만 가능하다!

여기서 분자에 있는 식을 계산할 때 사용하는 방법이 내적!

내적: 두 벡터의 연산의 성분곱을 취한 후에, 성분곱을 취한 벡터들의 성분을 모두 더해주는 연산
inner product
=> np.inner 을 이용!

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

🎈 내적

내적은 정사영(orthogonal projection)된 벡터의 길이와 관련있다.
Proj(x)는 벡터y로 정사영된 벡터 x의 그림자를 의미한다.
Proj(x)의 길이는 코사인법칙에 의해 ||x|| cosθ가 된다.
내적은 정사영의 길이를 벡터 y의 길이 ||y||만큼 조정한 값이다.

-> 내적은 두 벡터의 유사도를 측정하는데 사용 가능하다.

profile
Major interest in iOS 🍀 & 🍎

0개의 댓글