오늘은 벡터에 대해 공부했따.
숫자를 원소로 가지는 list(리스트) 혹은 array(배열)
스칼라
하나의 숫자 값. 단일 값으로 크기만을 가지며 방향성은 없다.
ex) Learning Rate, Accuracy
벡터
숫자의 집합으로, 일차원 배열 형태. 여러 스칼라들의 집합.
공간에서 한 점
. 원점으로부터 상대적 위치
d차원 공간에서의 원점으로부터의 상대적으로 위치한 한 점(d>=2. 보통 1차원은 스칼라)
벡터 숫자의 갯수를 벡터의 차원
이라고 한다.
코드상에서는 일반적으로 np로 행벡터를 사용
x = [1, 7, 2]
x = np.array([1, 7, 2])
벡터에 숫자를 곱하면 방향은 그대로고 길이만 변한다.(단, a<0이면 반대방향)
ax = [ax1, ax2, ...]에서 a를 스칼라곱
이라 한다.
벡터끼리 같은 모양을 가져야만 서로 덧셈과 뺄셈이 가능하다.
그리고 같은 모양이면 성분곱(Hadamard product)을 계산할 수 있다.
norm
(노름) : 원점에서부터의 거리. x의 노름은 ||x||
L1-노름 : 각 성분의 변화량의 절대값을 모두 더함, Robust 학습, Lasso 회귀에 사용
L2-노름 : 피타고라스 정리를 이용해 유클리드 거리 계산. Laplace 근사, Ridge 회귀에 사용
노름의 종류에 따라 기하학적 성질이 달라짐
def 11_norm(x):
x_norm = np.abs(x) # 절대값
x_norm = np.sum(x_norm) # 절대값을 다 합함
return x_norm
def 12_norm(x):
x_norm = x*x # 성분곱연산으로 각각의 스칼라값을 제곱
x_norm = np.sum(x_norm) # 총합
x_norm = np.sqrt(x_norm) # 제곱근 구함
return x_norm
# np로 계산 방법
x_norm_l1 = np.linalg.norm(x, ord=1)
x_norm_l2 = np.linalg.norm(x, ord=2) # 기본이 l2라 ord 생략 가능
||y-x|| = ||x-y||
거리 계산에는 벡터의 뺄셈을 이용한다. L1,L2 노름을 이용할 수 있다.
정사영(orthogonal projection)된 벡터의 길이와 관련이 있다.
Proj(x)의 길이는 코사인 법칙에 의해 ||x||cosθ가 된다.
내적은 정사영의 길이를 벡터y의 길이 ||y||만큼 조정한 값이다.
내적은 두 데이터가 얼마나 유사한가를 측정할때 내적을 활용한다.
L2 노름에서만 내적, 제2 코사인 법칙으로 계산이 가능하다.
import numpy as np
def angle(x, y):
v = np.inner(x, y) / (np.linalg.norm(x) * np.linalg.norm(y))
theta = np.arccos(v)
return theta
본 포스트의 학습 내용은 부스트클래스 <AI 엔지니어 기초 다지기 : 부스트캠프 AI Tech 준비과정> 강의 내용을 바탕으로 작성되었습니다.