행렬
- 행렬이란 벡터를 원소로 가진 2차원 배열이다.
[1324]
-
위와 같이 행(row)벡터가 모인 배열, 혹은 열(column)이 모인 배열로 볼 수 있다.
-
python에서는 행벡터를 원소로 가진 배열로 이해하면 코드작성이 수월하다.
-
보통 벡터는 소문자 볼드체로 표현하고 행렬은 대문자 볼드체로 표현한다.
-
행렬의 원소는 xij와 같이 표기하는데 앞의 i는 행, j는 열을 나타낸다.
전치
공간상의 행렬
행렬의 덧셈, 뺄셈, 성분곱, 스칼라곱
행렬의 덧셈과 뺄셈, 성분곱
- 두 행렬(X,Y)가 같은 모양(shape)라면 element wise로 연산이 이루어진다.
[x11x21x12x22]+[y11y21y12y22]=[x11+y11x21+y21x12+y12x22+y22]
[x11x21x12x22]−[y11y21y12y22]=[x11−y11x21−y21x12−y12x22−y22]
[x11x21x12x22]∗[y11y21y12y22]=[x11∗y11x21∗y21x12∗y12x22∗y22]
a[x11x21x12x22]=[ax11ax21ax12ax22]
행렬의 곱셈
- 두 행렬(X,Y)의 i번째 행벡터와 j번째 열벡터의 내적으로 계산된다.
[x11x21x12x22]⋅[y11y21y12y22]=[x11⋅y11+x12⋅y21x21⋅y11+x22⋅y21x11⋅y12+x12⋅y22x21⋅y12+x22⋅y22]
-
위와 같은 연산을 위해서는 X의 열과 Y의 행의 크기가 같아야 한다.
-
X,Y의 순서에 따라 결과가 달라지기 때문에 주의해야 한다.
-
numpy에서는 X @ Y
로 연산이 가능하다.
-
numpy.inner
함수는 X와 YT를 연산한 결과이다.
-
numpy.inner
함수는 X의 행의 개수와 Y의 행의 개수가 같을때 사용한다.
행렬의 이해하는 다른 방법
-
행렬은 하나의 연산자(operator)로 이해할 수 있다.
-
선형대수에서는 선형변환이라고 불리는 연산을 담당한다.
-
벡터 x에 A라는 행렬을 취함으로 새로운 차원의 z로 변환시킬 수 있다.
[z11z21]=[a11a21a12a22a13a23]⋅⎣⎢⎡x11x12x13⎦⎥⎤
- m차원 (3차원 x)를 n차원 (2차원 z)공간으로 보낼 수 있다.
역행렬
-
어떠한 행렬 A의 연산을 되돌리는 행렬을 역행렬(inverse matrix)라 부르고 A−1이라 표기한다.
-
AA−1=A−1A=I
-
I는 항등행렬로 어떤 행렬과 항등행렬과의 행렬곱은 결과는 항상 자기 자신이다.
-
역행렬을 위와 같이 m차원을 n차원으로 이동시킨 A연산을 다시 m차원으로 되돌린다.
-
역행렬은 행과 열의 개수가 같아야 하며, 행렬식(determinant)이 0이 아니여야 한다.
-
numpy.linalg.inv
로 계산할 수 있다.
-
만일 역행렬을 계산할 수 없다면 유사역행렬(무어-펜로즈 역행렬)을 사용하며 A+로 나타낸다.
-
n은 행, m은 열을 나타낸다.
-
A+A=I가 성립한다.
-
numpy.linalg.pinv
로 계산할 수 있다.
주의
만약 행이 열보다 많게 되면 원래행렬보다 먼저 곱해줘야 항등행렬을 구할 수 있다.
Xβ=y일때, β=X+y로 접근할 수 있으며
y^,y간의 L2 norm의 차이를 최소화 하는 방향으로 선형회귀식을 구할 수 있다.