[TIL] Day 6 - 인공지능 수학(1)

기역의궁전·2021년 4월 26일
0

dev2_TIL

목록 보기
5/18

Jupyter Notebook

명령어> jupyter notebook

  • "Markdown" 형식으로 작성
  • Oredered List (1. ~, 2. ~ ...) 작성 시,
    맨 앞의 index에 따라 밑에 따라오는 숫자들이 정해짐

Numpy array

기존 LIST 자료구조의 연산 처리 속도가 느리기 때문에 Numpy를 쓰면 빠르다!

import numpy as np

arr1 = np.array([1,2,3])  # 1차원 배열 or 1차원 (열)벡터
arr2
arr_2d = np.array([[1,2],[3,4]]) # 2x2 행렬
print(arr1.shape) # np.shape(arr1) -> (3,)
# 파이썬 문법상 그냥 3과 다르게 인지 하기 위해 3뒤에 콤마가 옴

%timeit ~ -> 시간 경과 확인 쥬비터 명령어

선형 시스템 (linear system)

연립일차방정식 'Ax=b' 꼴의 형태

1. 선형 시스템

  • 선형대수(linear algebra)의 목표는?
    어떠한 연립일차방정식, 즉 linear system 이든지 정형화된 방법으로 표현하고 해를 구함. ( Ax = b )

  • linear system 구성 요소
    * 각각의 방정식을 *linear equation(선형방정식) 이라 함
    * 알아내려는 미지수를 Unknown (혹은 variable) 이라 함
    * m개의 linear equations와 n개의 unknowns로 구성된 연립일차방정식을 m x n linear system이라함

※ 미지수들이 1승으로만 구성되어 있으면 => 선형방정식
아닐 경우, 비선형방정식(곡선) non-linear equation 이라함.
ex) sinx+y = 2 / 3x+y^2 = 2 / xy+z = 3

선형대수학 참고용 추천 블로그 : https://twlab.tistory.com/3?category=668741

m x n 선형 시스템의 Ax=b 표현 정리

  • 식은 행이고 행은 식이다 (linear equation <-> row )
  • m은 linear equation(선형방정식)의 개수
  • n은 unknown의 갯수
  • A는 m x n 행렬
  • x는 n-vector
  • b는 m-vector

프로그래밍 실습

# 행렬 표현
A = np.array( [[3,1,-1],[1,-2,-1],[1,1,1]] )
A.shape # np.shape(A) -> (3,3)

# 벡터 표현
b = np.array( [4,1,2] )
b.shape # (3,)

# 역행렬 구하기
 A_inv = np.linalg.inv(A)  # A^(-1)
 print(A_inv)
 '''
 [[ 5.00000000e-01 -7.40148683e-17 -5.00000000e-01]
 [ 1.00000000e+00 -1.00000000e+00 -2.00000000e+00]
 [-1.50000000e+00  1.00000000e+00  3.50000000e+00]]
 '''
 
 #역행렬을 이용한 선형시스템 Ax = b 해 구하기
 x = A_inv @ b # @가 행렬의 곱셈 => np.matmul(A_inv,b)
 print(x)  # [ 1. -1.  2.]
 x.shape  # (3,)
 
 # 결과 검증
 bb = np.matmul(A,x) # bb = A @ x
 if np.linalg.norm( b-bb ) < 1e-3 :
 	print("ok")
 else :
 	print("something wrong")
 
 #np.linalg.norm(X)는 vector의 크기를 float 또는 행렬로 반환
 # 1e-3 = 10^(-3)

2. 가우스 소거법

용어 및 표현

  • A=0, 특이하다
    "A의 역행렬(inverse matrix)가 존재하지 않는 경우, A가 특이(singular)하다 라고 함.
  • 해가 있는 선형 시스템 -> consistent
  • 해가 없는 선형 시스템 -> inconsistent

전방소거법(Forward elimination)

주어진 선형시스템을 아래로 갈수록 더 단순한 형태의 선형방정식을 가지도록 만드는 방법.
0을 위에서 아래로, 왼쪽에서 오른쪽으로으로 채워 나가며 A의 값을 소거

후방대입법(Back-substitution)

전방소거법으로 나온 행렬에 아래에서 위로 하나씩 식을 풀어나가는 방식

소거법에 활용된 3가지 기본행연산 (Elementary Row Operations, EROs)

  • Replacement(치환) : r[j] = r[j] - m x r[i]
    : j번째 행을 기준행인 i번째 행의 m배를 빼고 업데이트

  • Scaling(스케일링) : r[j] = s x r[j]
    : j번째 행을 s배하고 업데이트

  • Interchange(교환) : r[j], r[i] = r[i], r[j]
    : j번째 행과 i번째 행의 위치를 서로 바꾼다.

전방소거법의 가치

  • 주어진 선형시스템을 가장 풀기 쉬운 꼴로 변형.
  • 주어진 선형시스템의 rank(의미있는 식의 갯수)를 나타낸다.
    ex) 0x = 0 -> 의미없는 식
  • 선형시스템이 consistent인지 inconsistent인지 알려준다.

3. LU 분해

행렬 분해

:행렬의 인수분해라고 생각, 편하게 계산하기 위해서 분해함.

  • (P)LU 분해 (LU decomposistion)

    가우스 소거법의 행렬의 형태, 즉 행렬을 코드화한 것
    L = Lower triangular matrix(하삼각행렬)
    U = Upper triangular matrix(상삼각행렬)
    A = LU
    Ax=b ▶ (LU)x=b ▶ L(Ux)=b ▶ (1) Ly=b ▶ (2) Ux=y

    (1) Forward-substituation
    Ly=b로 나온 y값을 가지고
    
    (2) Back-substituation
    Ux=y

(P)LU분해의 의미

  • 'L' : A를 전방소거하는데 쓰인 replacement와 scaling에 대한 EROs를 기록해둔 행렬
  • 'U' : A를 전방소거하고 남은 Upper triangular matrix
  • 'P' : A를 전방소거하는데 쓰인 interchange에 대한 EROs를 기록해둔 행렬(옵션)

=> A = (P) x U x L

LU분해의 활용

  • 수치적 안정성
    : Ax = b의 해를 역행렬 A**(-1)을 직접 구하는 것은 불안정.

  • b가 자주 업데이트될 경우
    : Ax=b에서 b가 자주 변하게 될 경우, A를 미리 PLU분해 해두면 x를 실시간으로 구할 수 있다.

0개의 댓글