행렬
중요개념
- 행렬의 개념
- 행렬의 연산
- 벡터 공간에서 가지는 의미
- 연립방정식
- 선형회귀분석
목표
벡터의 확장된 개념인 행렬은 행(row)벡터를 원소로 가지는 2차원 배열로 벡터와 다르게 계산되는 연산들에 주의하시며 공부합시다.
권고사항
행렬연산은 딥러닝에서 가장 핵심적인 연산이라고 볼 수 있을만큼 중요하고, 자주 사용되기 때문에 행렬 연산의 메커니즘,그리고 이 때 가지는 기하학적 의미와 머신러닝에서 어떻게 사용되는지를 충분히 이해하고 넘어갑시다.
행렬이란?
- 행렬(matrix)은 벡터를 원소로 가지는 2차원 배열입니다.
- numpy에선 행(row)이 기본 단위입니다.
- 행렬은 행(row)과 열(column)이라는 인덱스(index)를 가집니다.
- 행렬의 특정 행(열)을 고정하면 행(열)벡터라 부릅니다.
- 전치행렬이란, 행과 열의 인덱스가 바뀐 행렬을 말합니다.
- 벡터가 공간에서 한 점을 의미한다면, 행렬은 여러 점들을 나타냅니다.
- 행렬의 행벡터 x(i)는 i번째 데이터를 의미합니다.
- 행렬의 x(ij)는 i번째 데이터의 j번째 변수의 값을 말합니다.
행렬의 연산
- 행렬끼리 같은 모양을 가지면 덧셈, 뺄셈을 할 수 있습니다.
- 성분곱은 벡터와 똑같습니다. (성분곱은 각 인덱스 위치끼리 곱합니다.)
- 스칼라곱도 벡터와 연산에서 차이가 없습니다.
- 행렬 곱셈은 i번째 행벡터와 j번째 열벡터 사이의 내적을 성분으로 가지는 행렬을 계산합니다.
- 행렬곱은 X의 열의 개수와 Y의 행의 개수가 같아야 합니다.
- numpy에선 @연산을 사용합니다.
행렬의 내적
- 넘파이의
np.inner
는 i번째 행벡터와 j번째 행벡터 사이의 내적을 성분으로 가지는 행렬을 계산합니다.
- 수학에서 말하는 내적과는 다릅니다.
행렬의 이해
- 행렬은 벡터공간에서 사용되는 연산자(operator)로 이해한다.
- 행렬곱을 통해 벡터를 다른 차원의 공간으로 보낼 수 있습니다.
- 행렬곱을 통해 패턴을 추출할 수 있고 데이터를 압축할 수도 있습니다.
- 모든 선형변환은 행렬곱으로 계산이 가능합니다.
역행렬
- 어떤 행렬 A의 연산을 거꾸로 되돌리는 행렬을 역행렬이라 부르고 A^-1라 표기한다. 역행렬은 행과 열 숫자가 같고 행렬식(determinant)이 0이 아닌 경우에만 계산할 수 있다.
numpy.linalg.inv
로 구할 수 있다.
- 만일 역행렬을 계산할 수 없다면 유사역행렬(pseudo-inverse) 또는 무어-펜로즈(Moore-Penrose)역행렬 A^+을 이용한다.
numpy.linalg.pinv
로 구할 수 있다.
연립방정식
numpy.linalg.pinv
를 이용하면 연립방정식의 해를 구할 수 있다.
선형회귀분석
numpy.linalg.pinv
를 이용하면 데이터를 선형모델(linear model)로 해석하는 선형회귀식을 찾을 수 있다.
- 선형회귀분석은 연립방정식과 달리 행이 더 크므로 방정식을 푸는 것은 불가능하다.
sklearn
의 LinearRegression
과 같은 결과를 가져올 수 있다.
- 직접 Moore-Penrose 역행렬을 구하는 경우 y절편항을 직접 추가해야 같은 결과를 얻을 수 있다.