벡터란 ?
벡터는 공간에서 한 점을 나타낸다.
1차원 공간에서 (x), 2차원 공간에서 (x,y), 3차원 공간에서 (x,y,z)와 같이 한 점을 지칭한다.
위에서 언급한 (x), (x,y), (x,y,z)는 모두 원점으로부터 떨어진 거리이다.
즉, 벡터는 원점으로부터 상대적 위치를 표현한다.
애초에 x도 0+x이므로, 두 백터의 덧셈은 다른 벡터로부터의 상대적으로 이동한다고 볼 수 있다.
벡터의 노름(norm)
벡터의 크기(=원점으로부터의 거리)를 의미한다.
노름의 정류에 따라 기하학적 성질이 달라진다.
L1-노름 : 각 성분 변화량의 절대값의 합.
L2-노름 : 피타고라스의 정리를 이용한 유클리드 거리
ex)
v = [1, -2, 3]
L1-노름의 거리 : 1 + 2+ 3 = 6
L2-노름의 거리 : (1+4+9).sqrt
위 노름을 이용해 두 벡터 사이의 거리를 계산할 수 있다.
두 벡터 사이의 각도도 구할 수 있는데, 이는 L2 노름만 가능하다. 심지어, d차원에서 각도 계산이 가능하다.
제 2 코싸인 법칙을 이용해서 구하면 된다.
cos @ = <x,y> / ()
내적
내적은 정사영된 벡터의 길이와 관련이 있다.
내적은 정사영된 벡터(x)를 길이 y만큼 조정한 값이다. 그렇기에 내적은 두 벡터의 유사도를 측정할 수 있음.
<x,y> =
여기서 주의할 점 !!!!!
넘파이 np.inner 함수는 i번째의 행벡터와 j번째의 행벡터 사이의 내적으로 계산한다
import numpy as np
X = np.array([
[1,2,3],
[0,1,2],
[2,3,4]
])
Y = np.array([
[1,1,-1],
[0,1,2],
])
np.inner(X, Y)
결과>>
array([[ 0, 8],
[-1, 5],
[ 1, 11]])
3*3 행렬과 2*3 행렬의 크기는 3*2가 된다.. 한눈에 사이즈가 잡히지 않아 직접 풀어보니
위 그림과 같은 과정으로 진행되다보니, 행의 크기는 상관없고, 열의 크기가 같아야한다. 생각해보면 당연함
역행렬(Pseudo Inverse)
행렬의 연산을 거꾸로 되돌리는 행렬
A와 A역행렬은 곱하면 항등행렬이 된다. 이 과정을 통해 역행렬을 구할 수 있는데,
조건 1) 행과 열의 수가 같아야 함 (정사각형 모양),
조건 2) determinant가 0이 아니어야 함
위와 같은 조건에 의해 역행렬을 계산할 수 없다면, 유사역행렬(pseudo-inverse) or 무어-펜로즈(Moore-Penrose) 역행렬 A+ 를 이용한다함.
넘파이에서는 pinv(arr)라는 따로 함수가 존재
import numpy as np
a = np.array([[1,2],[3,4],[2,3]])
inv_a = np.linalg.pinv(a)
print(inv_a)
다음과 같이 역행렬 조건에 맞지 않는 경우 pinv 함수를 통해 구할 수 있다.
이를 이용해 연립방정식 해를 풀 수 있다. 또한, 선형회귀식도 찾을 수 있다.
'부스트캠프 > day 정리' 카테고리의 다른 글
[week 1 - day 4] 딥러닝 ~ 베이즈 통계학 (0) | 2023.03.10 |
---|---|
[week 1 - day 3] 경사하강법 (0) | 2023.03.09 |
[week 1 - day 2] Pandas (0) | 2023.03.08 |
[week 1 - day 2] Python data handling/ Numpy (0) | 2023.03.08 |
[week 1 - day 2] Exception Handling (0) | 2023.03.07 |