Day_3 05. 행렬이 뭐예요?

작성일

1 분 소요

행렬이 뭐예요?

1. 행렬

  • 행렬(matrix)은 행벡터를 원소로 가지는 2차원 배열
  • numpy 에선 행(row)이 기본 단위

image

  • 행렬은 행(row)열(column)이라는 인덱스(index)를 가짐
  • 행렬의 특정 행(열)을 고정하면 행(열)벡터라 부름

  • 전치행렬(transpose matrix)은 행과 열의 인덱스가 바뀐 행렬
  • 행렬 뿐만 아니라 벡터에도 성립 -> 행벡터의 전치행렬은 열벡터

  • 벡터가 공간에서 한 점을 의미한다면 행렬은 여러 점들을 의미
  • 행렬의 행벡터 X_i는 i번째 데이터를 의미
  • 행렬의 X_ij는 i번째 데이터의 j번째 변수의 값을 의미

1.1 행렬의 덧셈, 뺄셈, 성분곱, 스칼라곱

  • 행렬은 벡터를 원소로 가지는 2차원 배열
  • 행렬끼리 같은 모양을 가지면 덧셈, 뺄셈을 계산 가능
  • 벡터의 덧셈, 뺄셈과 다를게 없음
  • 성분곱은 벡터와 같음
  • 스칼라곱도 벡터와 차이가 없음

1.2 행렬 곱셈

  • 행렬 곱셈(matrix multiplication)은 i번째 헹벡터와 j번째 열벡터 사이의 내적을 성분으로 가지는 행렬을 계산

image

  • 행렬의 곱셈은 순서가 굉장히 중요
    • AB != BA
  • numpy 에서는 @ 연산을 사용 or dot()
  • 두 행렬의 행벡터의 크기와 열벡터의 크기가 같아야 계산이 가능

1.3 행렬도 내적이 있을까?

  • 넘파이의 np.inneri번쨰 행벡터와 j번쨰 행벡터 사이의 내적을 성분으로 가지는 행렬을 계산
  • 수학에서 말하는 내적과는 다르므로 주의!

image

  • 두 행렬의 행벡터들의 크기가 같아야 계산이 가능

  • 행렬은 벡터공간에서 사용되는 연산자(operator)로 이해
  • 행렬곱을 통해 벡터를 다른 차원의 공간으로 보낼 수 있음

image

  • 행렬곱을 통해 패턴을 추출할 수 있고 데이터를 압축할 수 있음
  • 모든 선형변환(linear transform)은 행렬곱으로 계산 가능
  • 딥러닝은 선형변환과 비선형 함수들의 합성으로 이루어져있기 때문에 행렬곱을 확실히 이해해야 함

2. 역행렬

  • 어떤 행렬 A의 연산을 거꾸로 되돌리는 행렬을 **역행렬(inverse matrix)이라 부르고 A^-1라 표기
  • 역행렬은 행과 열 숫자가 같고 행렬식(determinant)이 0이 아닌 경우에만 계산 할 수 있다.

image

  • np.linalg.inv() 함수 사용해서 역행렬 계산 가능
  • 역행렬은 정방행렬만 계산 가능

  • 만일 역행렬을 계산할 수 없다면 유사역행렬(pseudo-inverse) 또는 무어-펜로즈(Moore-Penrose) 역행렬 A^+을 이용

image

  • np.linalg.pinv() 함수 사용해서 유사역행렬 계산 가능

2.1 응용1: 연립방정식 풀기

  • np.inalg.pinv를 이용하면 연립방정식의 해를 구할 수 있음

image

2.2 응용2: 선형회귀분석

  • np.linalg.pinv를 이용하면 데이터를 선형모델(linear model)로 해석하는 선형회귀식을 찾을 수 있음
  • 선형회귀분석은 행이 더 많기 때문에 방정식 푸는건 불가능

image

  • 무어펜로즈 역행렬을 이용하게 되면 y에 가장 근접하는 y_hat을 구할 수 있음

  • sklearnLinearRegression과 같은 결과를 가져올 수 있음
  • sklearn에서의 구하는 과정에서 y절편은 자동으로 추가됨
  • 무어펜로즈 방법을 사용하면 y절편을 수동으로 추가해줘야함

댓글남기기