2. matrix

유승우·2022년 5월 2일
0

행렬


  • 행렬은 행과 열이라는 인덱스를 가지며, 벡터를 원소로 가지는 2차원 배열
  • 벡터가 공간에서 한 점을 의미한다면 행렬은 여러 점들을 나타낸다.

행렬 연산


  • 행렬끼리 같은 모양을 가지면 덧셈, 뺄셈이 가능하다.
  • 행렬 간 곱셈을 하기 위해서는 X의 열의 개수와 Y의 행의 개수가 같아야 하며, 순서에 따라 결과가 달라진다 ex ) (12 x 3) x (3 x 5) = (12 x 5)

행렬의 내적


  • 넘파이의 np.inner로 i번째 행 벡터와 j번째 행 벡터 사이의 내적을 성분으로 가지는 행렬을 계산할 수 있다.
  • 따라서, 두 행렬의 행 벡터의 크기가 같아야만 내적을 계산할 수 있다.
  • i번째 행 벡터와 j번째 열 벡터 사이의 내적을 계산하는 행렬 곱셈과 혼동 주의!

행렬의 이해


  • z와 x 두 벡터를 a행렬을 통해 이어 주는 함수의 역할을 연산자(operator)라 한다.
zi=Σaijxj\small z_i = \Sigma a_{ij} x_j
  • 이를 통해 벡터를 다른 차원의 공간으로 보낼 수 있으며, 패턴을 추출하거나 데이터를 압축할 수 있다.
  • 모든 선형 변환은 행렬 곱으로 계산할 수 있기 때문에, ML과 DL을 정확히 이해하기 위해서는 행렬 곱을 잘 이해해야 한다.

역행렬


  • 어떤 행렬 A를 항등 행렬로 만들어 주는 행렬을 역행렬이라 한다.
  • 역행렬은 행렬식(determinant)가 0이 아니어야 존재할 수 있다.

무어 팬로즈 역행렬


  • 만약 정방행렬이 아닌 행과 열이 다른 행렬 같은 경우 역행렬을 계산할 수 없기 때문에 유사역행렬 또는 무어 팬로즈 역행렬(A+)을 이용한다.
  • 파이썬에서는 np.linalg.pinv()를 통해 유사역행렬을 구할 수 있다.
  • 행과 열의 개수에 따라 유사역행렬을 곱해주는 순서가 달라지기 때문에 순서에 주의해야한다.

n ≥ m 인 경우


A+=(ATA)1ATA^+ = (A^TA)^{-1}A^T

n ≤ m 인 경우


A+=AT(AAT)1A^+ = A^T(AA^T)^{-1}

응용 : 연립방정식


Ax=bx=A+b=AT(AAT)1bAx = b \\ x = A^+b = A^T(AA^T)^{-1}b
  • 위의 사진과 같은 연립방정식처럼 방정식의 개수보다 변수의 개수가 같거나 많을때 무어 팬로즈 역행렬을 이용하면 해를 구하기 쉽다.
  • n ≤ m 의 경우 이므로 유사역행렬이 뒤에 곱해져서 나타난다.

응용 : 선형회귀분석


  • 무어 팬로즈 역행렬을 이용해 L2노름을 최소화하는 최적의 회귀직선을 구할 수 있다.
  • 선형 회귀 분석은 데이터가 변수 개수보다 훨씬 많기 때문에, 연립 방정식 처럼 해를 구할 수 없다.
  • n ≥ m 의 경우이므로 유사역행렬이 앞에 곱해져서 나타난다.

Xβ=y^yβ=X+y=(XTX)1XTyX\beta = \hat{y} \approx y \\ \beta = X^+y = (X^TX)^{-1}X^Ty
  • 아래의 코드를 돌려보면 두 사이킷런 모델과 무어 팬로즈 방식을 이용해 추정한 결과가 다르게 나타나는데, 이는 절편의 차이가 있다.
  • 사이킷런의 선형회귀는 자동으로 y절편을 추정해주지만, 무어 팬로즈 방식은 직접 절편을 추가해주어야 한다.

0개의 댓글