AI 일별 공부 정리
선형대수 -1 (벡터, 매트릭스)
Taeho(Damon)
2021. 7. 22. 21:30
Data structure
1D(1차원)
데이터의 순서가 유지되어야 하는 데이터 구조
주로 list로 이용된다.
2D(2차원)
dataframe을 통해 주로 표현하며 행렬과 같다.
Determinant - 매트릭스를 하나의 수로 표현하는 것
2x2의 Determinant는 위와 같이 실행한다.
스칼라와 벡터 (Scalar and Vector)
- 스칼라와 벡터는 선형 대수를 구성하는 기본 단위입니다.
- 스칼라는 단순히 변수로 저장되어 있는 숫자이며 벡터 혹은 매트릭스에 곱해지는 경우 해당 값에 곱한 값으로 결정됩니다.
- 한편 벡터는 파이썬에서는 주로 list로 사용 되며, 이전에 다뤘던 것처럼 데이터셋을 구성하고 있는 데이터프레임의 행/열로써 사용되기도 합니다.
- 매트릭스는 벡터의 모음으로 간주 될 수도 있기 때문에 벡터를 이해하는 것은 매우 중요합니다.
Vector
- n 차원의 벡터는 컴포넌트라 불리는 n개의 원소를 가지는 순서를 갖는 모음입니다. (컴포넌트는 스칼라로 간주 되지 않습니다.)
- 벡터는 일반적으로 위의 화살표 (→) 를 갖는 소문자의 형태로 표현 됩니다.
- 물리적으로 벡터는 방향과 크기라는 2가지 속성을 갖고 있습니다.
- 벡터의 길이(length)는 벡터의 차원수와 동일하다
벡터의 크기 (Magnitude, Norm)
v = [1,2,3,4]
|v| = 각 요소들의 제곱을 총합하여 루트씌운 값
|v| = √1+4+9+16 = √30
L1 Norm 은 벡터 p, q 의 각 원소들의 차이의 절대값의 합
L2 Norm 은 벡터 p, q 의 유클리디안 거리(직선 거리)
def NormDif(v): # v = np.array()
# L2 - L1 = (sum_lst(v**2)**(1/2)) - sum_lst(abs(v))
return abs((sum(v**2)**(1/2)) - sum(abs(v)))
# 예시 : 벡터의 크기(Norms) L2와 L1의 절대값 차이를 구하는 함수를 만들어라
*Error 타입 (두개의 벡터 값을 받아 오류 방식에 따라 결과값을 도출)
#평균 제곱 오차 (Mean Square Error) : MSE
#측정치와 예측치의 각각 차를 구하고 결과값에 제곱을 하고 모두 더한 뒤 , 개수로 나눠준다.
#평균 절대 오차 (Mean Absolute Error) : MAE
#각 측정값과 실제값 사이의 절대 오차를 구하고, 결과값을 모두 더한 뒤 개수로 나눠준다.
벡터의 내적 ( Dot Product )
두 벡터 𝑎⃗ 와 𝑏⃗ 의 내적은, 각 구성요소를 곱한 뒤 합한 값과 같습니다.
- 내적은 교환법칙이 적용 됩니다: 𝑎⋅𝑏=𝑏⋅𝑎
- 내적은 분배법칙이 적용 됩니다: 𝑎⋅(𝑏+𝑐)=𝑎⋅𝑏+𝑎⋅𝑐
- 벡터의 내적을 위해서는 두 벡터의 길이가 반드시 동일해야 합니다.
import numpy as np
a = np.array[1,2,3]
b = np.array[4,5,6]
print(np.dot(a,b))
array [ 4+10+18 ] = array [32]
Matrix Transpose
- 매트릭스의 전치는, 행과 열을 바꾸는 것을 의미합니다. 이는 일반적으로 매트릭스 우측 상단에 𝑇 혹은 tick 마크를 통해 표기
- 읽는 방법은 B transpose 혹은 B prime ( 𝐵^T,𝐵′ )
Matrix multiplication
Matrix의 종류
Identity (단위 매트릭스):
- iagonal 매트릭스 중에서, 모든 값이 1인 경우입니다. 임의의 정사각 매트릭스에 단위 행렬을 곱하면, 그 결과값은 원본 정사각 매트릭스로 나오며,
- 반대로 임의의 매트릭스에 대해서 곱했을때 단위 매트릭스가 나오게 하는 매트릭스를 역행렬 (Inverse)라고 부릅니다.
𝐴𝐼==𝐴, 𝐴𝐴−1=𝐼
- 역행렬이 0인 경우가 있는데 그런 경우는 위의 그림에서 a:c, b:d의 비율이 같을때 이루어진다.
- 예를 들면,a=1 ,b=3, c=3, d=9 -> 1:3 , 3:9로 결국 비율은 같다.
#예시 : inverse행렬을 구하는 함수를 정의해라, 단 값이 error일시 -1로 반환.
def myInverse(m) : # m = np.array()
try : return np.linalg.inv(m)
except : print(-1)