머신러닝에서 쓰이는 수학
1. 선형대수
- 행렬
2. 미적분학 (미분 위주)
- 최적화 (오차를 최소화)
3. 통계
- 데이터 이해
- 패턴
4. 확률
- 예측 / 가능성
선형 대수학을 배우는 이유
파이썬 numpy array 같은 경우라던지, 행렬 등의 개념이 사용되는 것이 많다.
선형대수학 : 일차식이나 일차 함수를 공부하는 학문
복잡한 선형 시스템을 행렬과 벡터로 쉽게 표현 가능

일차식과 일차함수
(n차) 다항식
● 일차식 : 가장 높은 차수가 1인 다항식
● n차식 : 가장 높은 차수가 n인 다항식
e.g. 3차 다항식



(n차)함수
● 일차 함수
y는 x에 대한 함수

함수 f는 x에 대한 함수

● 3차 함수

일차식 표기법
변수 개수에 따른 함수 표현
● 변수 x, y에 대한 함수(예시)

● 변수 여러 개에 대한 함수 표현

행렬
행렬(Matrix)
● 행렬A의 원소 12개
- 3행(row), 4열(column)

=> 3 X 4 행렬

=> 4 X 2 행렬
행렬의 원소 표현
● 행렬A의 i행, j열에 위치한 원소를 표현하려면 : Aij



실습 - 넘파이로 행렬 사용하기

import numpy as np
A = [[0,1,-1],[1,2,3],[2,1,0],[-1,2,-4]]
B = [[0,2],[1,1],[-1,-2]]
np.array(A)
array([[ 0, 1, -1],
[ 1, 2, 3],
[ 2, 1, 0],
[-1, 2, -4]])
np.array(B)
array([[ 0, 2],
[ 1, 1],
[-1, -2]])
A[1][1] => 2
A[3][0] => -1
행렬의 원소 표현
● m x n 행렬의 원소 표현

벡터
벡터(Vector)
● 벡터 : 행이 하나거나 열이 하나인 행렬
- 보통 벡터라 하면 열벡터를 의미함

● 차원
- a는 5차원 열 벡터, b는 4차원 행 벡터
● m차원 벡터

● 보통 행렬은 대문자, 벡터는 소문자로 표현

행렬 덧셈과 곱셈
행렬의 덧셈
● 같은 위치에 있는 원소들을 더해준다.

행렬의 스칼라 곱
● 스칼라곱

두 행렬의 곱 – 내적곱, 외적곱
우리는 내적곱만 배울 예정
두 행렬의 내적 곱

A(2 X 3) X B(3 X 2) => shape (2 X 2)
1 * 5 + 3 * 4 + 1 * 3 = 20 1 * 6 + 3 * 2 + 1 * 1 = 13
2 * 5 + 2 * 4 + 1 * 3 = 21 2 * 6 + 2 * 2 + 1 * 1 = 17

두 행렬의 내적곱
파이썬에서는 @ 으로 표시한다. 넘파이에서는 dot으로 표시한다.


두 행렬의 내적곱 - 예시

실습 - 넘파이로 행렬 사용하기

행렬곱(@) / 스칼라 곱(*)
A = np . array(
[[ 1 , - 1 , 2 ],
[ 3 , 2 , 2 ]
] )
B = np . array( [
[ 0 , 1 ] ,
[ - 1 , 1 ] ,
[ 5 , 2 ]
] )
C = np . array( [
[ 2 , - 1 ],
[ - 3 , 3 ]
] )
D = np . array( [
[ - 5 , 1 ] ,
[ 2 , 0 ]
] )
(2*A) @ (-1*B) @ (3*C + D)
array([[ 34, -28],
[ 110, -130]])
행렬 연산 퀴즈

질문1
a13 = -1 + -2 = -3
질문2
a11 = 1 * 3 + 2 * 1 + -1 * 2 = 3
질문3
a12 = 1 * 2 + 2 * 1 + -1 * -1 = 5
질문4
AB shape ( 3 x 3 ) @ ( 3 x 2) = ( 3 x 2 )
두 행렬 요소 별 곱하기 : o

두 행렬 요소 별 곱하기 : o – 파이썬 넘파이로 구현

실습 – 넘파이로 행렬 연산하기
np.dot(A , B) 와 A @ B가 동일한 내적의 곱인 것을 유의하며 보자.
A = np.array(
[[1, -1, 2],
[3, 2, 2],
[4, 1, 2]])
B = np.random.rand(3,3)
A
array([[ 1, -1, 2],
[ 3, 2, 2],
[ 4, 1, 2]])
B
array([[0.52029652, 0.74584724, 0.32701989],
[0.05597946, 0.51938929, 0.59335944],
[0.67059721, 0.67772168, 0.378086 ]])
A + B
array([[ 1.52029652, -0.25415276, 2.32701989],
[ 3.05597946, 2.51938929, 2.59335944],
[ 4.67059721, 1.67772168, 2.378086 ]])
5 * A
array([[ 5, -5, 10],
[15, 10, 10],
[20, 5, 10]])
np.dot(A,B)
array([[1.80551148, 1.58190132, 0.48983245],
[3.01404292, 4.63176365, 2.92395055],
[3.47835998, 4.8582216 , 2.657611 ]])
A @ B
array([[1.80551148, 1.58190132, 0.48983245],
[3.01404292, 4.63176365, 2.92395055],
[3.47835998, 4.8582216 , 2.657611 ]])
특수행렬: 전치행렬, 단위행렬, 역행렬
전치 행렬(Transposed Matrix)
● 행과 열을 서로 바꾸어주는 것
● 행렬 연산 시 행 수와 열 수를 맞춰주기 위해 사용 (2 x 3) (5 x 3).T => (3 x 5)
파이썬에서 A.T, A.transposed()로 사용

단위 행렬(identity matrix)
● 대각 행렬 값이 모두 1인 행렬
● 어떤 행렬A에 단위 행렬을 곱하면 그대로A가 된다.


역행렬(Inverse Matrix)
● 행렬 자기 자신과 곱했을 때 단위 행렬이 나오는 행렬

A x A-1 = I
실습1 – 넘파이로 전치, 단위, 역행렬 사용하기
A = np.array(
[[1, -1, 2],
[3, 2, 2],
[4, 1, 2]])
A_tranpose = A.T
A.T
array([[ 1, 3, 4],
[-1, 2, 1],
[ 2, 2, 2]])
A.transpose()
array([[ 1, 3, 4],
[-1, 2, 1],
[ 2, 2, 2]])
선형 대수학이 머신러닝에 사용되는경우
● 복잡한 수식을 행렬과 벡터로 요약해서 표현할 수 있다.


선형대수학과 머신러닝 요약
● 선형대수학은 일차식, 일차 함수, 행렬, 벡터를 다루는 학문이다.
● 머신러닝을 할 때 데이터를 일차식으로 표현하는 경우가 많다.
● 행렬과 벡터를 이용하면 정돈된 형태로 효율적 계산이 가능하다.
'Statistics and Math' 카테고리의 다른 글
CH04_06 확률변수의 기댓값과 산포도 (0) | 2022.09.28 |
---|---|
CH04_05 확률변수 (0) | 2022.09.28 |
Ch04_04 베이즈 정리 (0) | 2022.09.27 |
CH04_03 조건부 확률 (0) | 2022.09.27 |
CH04_02. 확률의 계산 (0) | 2022.09.27 |