선형 대수학 | Chapter 4. 행렬, 파트 1 : 행렬과 행렬의 기본 연산

    728x90

     

    4.1 Numpy에서 행렬 생성과 시각화

    행렬 ( 표기  : $\mathbb{A}$ 또는 $\mathbb{M}$ )

    ▶ 특수 행렬

    - 난수 행렬

    : 가우스(정규)와 같은 분포로부터 무작위로 추출된 숫자를 가진 행렬

    # 난수 생성 함수
    A = np.random.randn(4, 6) # 행 수, 열 수

     

    - 정방 행렬과 비정방 행렬 ( 표기 : $\mathbb{R}^{N * N}$ )

    : 행 수와 열 수가 같은 행렬 

    : 행 수가 열 수보다 더 많으면 높다고 표현, 열 수가 행 수보다 더 많으면 넓다고 표현

     

    - 대각 행렬

    : 행렬의 대각은 왼쪽 위에서 시작해 오른쪽 아래로 내려가는 원소들을 말함

    : 대각 행렬은 모든 비대각 원소가 0, 대각 원소는 0 또는 그 외의 값을 가질 수 있는 유일한 값

    # 대각 행렬 함수
    A = np.diag(행렬) # 대각 원소를 벡터로 반환
    B = np.diag(벡터) # 대각 원소에 해당 벡터 원소가 있는 행렬 반환

     

    - 삼각 행렬

    : 주 대각선의 위 또는 아래가 모두 0인 행렬

    : 대각선 위에 0이 아닌 원소가 있으면 상삼각 행렬

    : 대각선 아래에 0이 아닌 원소가 있으면 하삼각 행렬

    # 삼각 행렬 함수
    A = np.triu() # 상삼각 행렬
    B = np.tril() # 하삼각 행렬

     

    - 단위 행렬 ( 표기 :  $I_{5}$ )

    : 모든 대각 원소가 1인 정방 대각 행렬

    : 행렬 또는 벡터에 단위 행렬을 곱하면 동일한 행렬 또는 벡터가 나온다는 점에서 숫자 1과 동등.

    # 단위 행렬
    A = np.eye()

     

    - 영 행렬 ( 표기 : 0 )

    : 모든 원소가 0인 행렬

    # 영 행렬 함수
    A = np.zeros()

     

    4.2 행렬 수학 : 덧셈, 스칼라 곱셈, 아다마르곱

     행렬의 덧셈과 뺄셈

    : 두 행렬을 더하거나 뺄 때는 대응되는 원소끼리 가능. 즉, 크기가 같은 두 행렬 사이에서만 성립함.

     

    행렬 이동

    : 정방 행렬에 스칼라를 더하는 방식 

    : 대각 원소에 상수를 더하는 것 (대각이 아닌 요소는 변하지 않음) 

    : $\mathbb{A} + \gamma I$

    A = np.array([], [], ..) # 배열
    s = 6  # 스칼라
    
    # 행렬 이동
    A + s*np.eye(len(A))
    
    # 행렬 이동이 아님!
    A + s

     

    : 데이터 과학 분야에서는 행렬의 수치적 안정성을 높이고, 이동의 효과를 보면서 행렬을 가능한 많은 정보를 보존하기 위해 상대적으로 적은 양을 이동함.

    : 행렬의 이동을 이용한 주요 응용 2가지 : 1) 행렬의 고윳값을 찾는 메커니즘 2) 모델을 데이터에 적합시킬 때 행렬을 정규화하는 메커니즘

     

    스칼라 곱셈

    $\gamma \, \begin{bmatrix} a & b \newline c & d \end{bmatrix} = \begin{bmatrix} \gamma a & \gamma b \newline \gamma c & \gamma d \end{bmatrix}$

     

    아다마르 곱 ( 표기  : $A\odot B$ )

    $\begin{bmatrix} 2 & 3 \newline 4 & 5 \end{bmatrix} \,\odot\, \begin{bmatrix} 2a & 3b \newline 4c & 5d \end{bmatrix}$
    # 아다마르 곱 함수
    A = np.random.randn(3, 4)
    B = np.random.randn(3, 4)
    
    # 아다마르 곱
    A * B
    np.multiply(A, B)
    
    # 아다마르 곱이 아님!
    A @ B

     

    4.3 (표준) 행렬 곱셈 ( 표기 : AB )

    한 행렬의 행과 다른 행렬의 열 사이 스칼라 곱셈의 조직적 집합

    >> 두 행렬의 크기가 서로 짝이 맞을 때 두 행렬을 곱할 수 있음.

     

     행렬 곱셈

    M  x N ↔ N x K

    행렬 곱셈은 왼쪽 행렬의 열 수가 오른쪽 행렬의 행 수와 같을 때 유효 (N으로 동일)

    그 이유는 곱셈 행렬의 $(i, j)$번째 원소가 행렬의 $i$번째 행과 오른쪽 행렬의 $j$번째 열 사이의 내적이기 때문.

    + 일반적인 교환 법칙을 따르지 않음.

    곱셈 행렬의 크기는 왼쪽 행렬의 열 수와 오른쪽 행렬의 열 수로 정의됨. (M x K)

     

    행렬 곱셈 예제

    $\begin{bmatrix} 2 & 3 \newline 4 & 5 \end{bmatrix} \, \begin{bmatrix} a & b \newline c & d \end{bmatrix} \,=\, \begin{bmatrix} (2a+3c) & (2b+3d) \newline (4a+5c) & (4b+5d) \end{bmatrix} $

    : 행렬 곱셈의 결과는 왼쪽 행렬의 행과 오른쪽 행렬의 열 사이의 모든 쌍에 대한 선형 관계를 저장하는 행렬이 됨.

     

    행렬-벡터 곱셈

    : 행 벡터만 행렬의 왼쪽에 곱할 수 있음 → $v^{T}A$

    : 열 벡터만 행렬의 오른쪽에 곱할 수 있음 → $Av$

    : 행렬-벡터 곱셈의 결과는 항상 벡터임. 결과 벡터의 방향은 곱하는 벡터의 방향에 따라 결정됨.

     

     행렬-벡터 곱셈의 해석 (선형 가중 결합, 기하학적 변환)

    : 행렬-벡터 곱셈이 해당 벡터를 회전하고 확장할 수 있는 역할을 함.

    : 행렬은 이러한 변환을 담는 그릇임.

     

    4.4 행렬 연산 : 전치

    단순히 행과 열을 바꾸는 것

    # 행렬 전치 매서드 및 함수
    A = np.array([ [...], [...] ])
    A_T1 = A.T  # 메서드
    A_T2 = np.transpose(A)  # 함수

     

     내적과 외적 표기법

    [ 내적 ]   ㅡ ㅣ

    : 크기가 M x 1인 두 열 벡터에서 하나만 전치하면 1 x M과 M x 1인 두 개의 '행렬'이 존재하게 됨. 

    '내부' 차원은 일치하고 '외부' 차원을 통해 곱셈의 결과가 1 x 1 스칼라가 됨을 알 수 있음. 이것이 내적을 $a^{T}b$로 표시하는 이유임.

    [ 외적 ]   ㅣ ㅡ

    : 크기가 M x 1과 1 x N인 열벡터와 행벡터를 곱하면 '내부' 차원은 일치하고, 결과의 크기는 M x N이 됨.

     

    4.5 행렬 연산 : LIVE EVIL (연산 순서)

    여러 행렬의 곱의 전치는 각 행렬을 전치하고 역순으로 곱한 것과 같음

    $L, I, V, E$는 모두 행렬임.

    $(LIVE)^{T} = E^{T}V^{T}I^{T}L^{T}$

     

    4.6 대칭 행렬

    대응되는 행과 열이 같은 행렬

    즉, 행과 열을 바꿔도 행렬에는 아무런 변화가 없음.

    $A^{T} = A$

    대칭 행렬은 자신의 전치 행렬과 같음.

    $\begin{bmatrix} a & e & f & g \newline e & b & h & i \newline f & h & c & j \newline g & i & j &d \end{bmatrix}$

     

    ▶ 비대칭 행렬로부터 대칭 행렬 생성하기

    어떤 행렬이든 자신의 전치를 곱하면 정방 대칭 행렬이 생성됨.

    $A^{T}A$와 $AA^{T}$ 모두 정방 대칭 행렬임.

    [ 정방 ]

    만약 $A$가 M x N이라면 $A^{T}A$는 (N x M)(M x N)임. 그러면 행렬의 크기는 N x N으로 정방 행렬이 됨.

    [ 대칭 ]

    대칭 행렬의 정의는 한 행렬과 전치 행렬이 동일하다는 것.

    $(A^{T}A)^{T} =  A^{T}A^{TT}  =  A^{T}A$ 

    결과 행렬인 $ A^{T}A$ 은 통계 모델의 특잇값 분해의 핵심임. 

     

     

    728x90

    댓글