[TIL] Day 6 - 인공지능 수학(1)
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를 실시간으로 구할 수 있다.
Author And Source
이 문제에 관하여([TIL] Day 6 - 인공지능 수학(1)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hook0318/TIL-Day-6-인공지능-수학1저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)