Vector
:숫자를 원소로 가지는 리스트
:공간에서 한 점 : 1차원이든 5차원이든 한 점으로 나타난다.
원점에서부터 그 위치(점)까지 연결된 화살표로 표현한다.
- 열벡터 : 세로벡터
ex) [1,]
[2,]
[3] - 행벡터 : 가로벡터
ex) [1, 2, 3]
import numpy as np x=np.array([1,2,3])
벡터의 차원
각 벡터안의 숫자들의 갯수
ex) [1,2,3] =>3차원
스칼라곱
각 구성성분에 스칼라값을 곱해주게 된다.
방향은 그대로이고 길이만 늘어나거나 줄어든다.
x=np.array([1,2,3])
#a*x=[a*1,a*2,a*3]
print(2*x)
>>>[2 4 6]
스칼라를 a라고 생각하면 된다.
벡터의 덧셈과 뺄셈
각 구성성분끼리의 덧셈이나 뺄셈
같은 형태(모양)이어야지만 계산이 가능하다
두 벡터의 덧셈은 다른 벡터로부터 상대적 위치이동을 표현한다.
위 그림에서 y벡터가 파랑, x벡터가 빨강이다.
노랑색 화살표가 y+x 벡터라고 할 수 있다
x=np.array([1,2,3])
y=np.array([4,5,6])
#x+y=[1+4,2+5,3+6]
print(x+y)
>>>[5 7 9]
뺄셈은 방향을 반대로만 생각하면 된다.
성분곱 : Hadamard product : x⊙y
각 구성 성분끼리의 곱셈
x=np.array([1,2,3])
y=np.array([4,5,6])
#x*y=[1*4,2*5,3*6]
print(x*y)
>>>[ 4 10 18]
norm
원점에서부터 그 벡터(한 점) 사이의 거리
모든 임의의 차원 d에 대해 성립한다
종류에 따라 기하학적 성질이 달라진다.
- L1 norm
각 성분의 변화량의 절댓값
각 구성성분의 변화량의 절댓값을 모두 더해주면 된다.
robust하게 학습할 떄, lasso 회귀에서 사용한다
def l1_norm(x):
x_norm= np.abs(x)
x_norm=np.sum(x_norm)
return x_norm
- L2 norm : 유클리드 거리
원점에서 직접 점으로 연결되는 선의 거리
라플라스 근사, ridge 회귀에서 사용한다
def 12_norm(x): x_norm=x*x x_norm=np.sum(x_norm) x_norm=np.sqrt(x_norm) return x_norm
두 벡터 사이의 거리
벡터의 뺄셈을 이용하면 된다. 뺄셈을 거꾸로 해도 거리는 같다.
두 벡터 사이의 각도
각도는 L2 norm에서만 가능하다. L1 norm에서는 불가능하다.
x, y, x-y로 이루어진 세 삼각형에서 코사인 제 2법칙을 적용한다.
2차원 뿐 아니라 어떠한 n차원에서 가능하다
def angle(x,y):
v=np.inner(x,y) / (l2_norm(x) * l2_norm(y))
a=np.arccos(v)
return a
내적 : inner product
두 벡터의 성분곱을 모두 더해주는 것
import numpy as np
x=np.array([1,2,3])
y=np.array([4,5,6])
# x*y=1*4+2*5+3*6
print(np.inner(x,y))
>>32
내적은 정사영된 벡터(orthogonal projuction)의 길이와 관련이 있다.
정사영된 벡터는 x벡터를 y벡터 위로 빛을 비추었을 때 생기는 그림자를 의미한다.
정사영된 벡터의 길이는 x의 벡터의 길이에 cos(x와 y사이의 각도)를 곱하면 된다.
내적은 정사영된 벡터를 y의 길이만큼 조정한 값이다.
그래서 두 벡터사이의 유사도를 측정하는데 사용한다. (similarity)