부스트캠프/day 정리

[week1 - day 3] 벡터 & 행렬

요다다 2023. 3. 8. 18:57

벡터란 ?

벡터는 공간에서 한 점을 나타낸다.

1차원 공간에서 (x), 2차원 공간에서 (x,y), 3차원 공간에서 (x,y,z)와 같이 한 점을 지칭한다.

위에서 언급한 (x), (x,y), (x,y,z)는 모두 원점으로부터 떨어진 거리이다.

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

애초에 x도 0+x이므로,  두 백터의 덧셈은 다른 벡터로부터의 상대적으로 이동한다고 볼 수 있다.

 

벡터의 노름(norm)

벡터의 크기(=원점으로부터의 거리)를 의미한다.

노름의 정류에 따라 기하학적 성질이 달라진다. 

 

L1, L2

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 함수를 통해 구할 수 있다.

 

이를 이용해 연립방정식 해를 풀 수 있다. 또한, 선형회귀식도 찾을 수 있다.