240518 TIL #402 AI Tech #17 벡터

김춘복·2024년 5월 17일
0

TIL : Today I Learned

목록 보기
402/550

Today I Learned

오늘은 벡터에 대해 공부했따.


벡터

숫자를 원소로 가지는 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

  • 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 준비과정> 강의 내용을 바탕으로 작성되었습니다.

profile
Backend Dev / Data Engineer

0개의 댓글