선형대수학

김태호·2024년 5월 19일

머신러닝 기본기

목록 보기
2/3

1. 행렬과 벡터

행렬 : 수를 직사각형의 형태로 나열한 것


행렬안의 각 수는 행렬의 원소라 함
행렬의 가로줄을 행(row), 세로줄을 열(column)이라 함
행렬을 표현할 때 'row x column 행렬' 혹은 행렬의 차원이 row x column'이라함
행렬안의 원소 표현

벡터 : 행 혹은 열이 하나인 행렬
(열벡터를 주로 사용)

벡터의 차원표기는 원소의 갯수n으로 'n차원의 열벡터'로 표현
벡터의 원소표현

2. Numpy로 행렬 사용하기

1) 행렬 만들기(2차원 배열)

import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]])

2) 랜덤한 값으로 행렬 만들기

r = np.random.rand(3, 5) # (3, 5)의 랜덤한 수로 된 행렬 만들기

3) 모든 값이 0인 행렬 만들기

z = np.zeros((3, 5)) # (3, 5)의 0으로 된 행렬 만들기

4) 행렬에서 원소 받아오기

a = np.array([[1, 2, 3], [4, 5, 6]])
a[0][2] # 3

3. 행렬 연산

1. 행렬 덧셈

같은 위치의 원소를 더함
이때 더하는 두 행렬은 차원이 같아야 함

2. 곱셉(스칼라 곱)

각 위치의 원소에 스칼라 값을 곱함

3. 곱셉(두 행렬의 곱 - 내적곱)

m x n 행렬 A와 n x p 행렬 B를 곱한 결과 : m x p 행렬

결과 행렬의 원소 : i행 j열의 원소는 A의 i행과 B의 j열의 곱(각 자리 원소를 곱한 값이 합)
-> A의 i행과 B의 j열은 원소의 수가 같아야함
-> 행렬의 곱은 교환 법칙 성립 X

외적곱

m x n 행렬 A와 m x n 행렬 B의 외적곱 : m x n 행렬
각 자리의 원소를 곱하면 됨
-> 행렬의 차원이 동일 해야함

4. numpy로 행렬 연산

a + b # 덧셈
a * 5 # 스칼라 곱
a @ b # 내적곱
np.dot(a, b) # 내적곱

5. 특수한 행렬

1. 전치 행렬

행렬의 열과 행을 바꾼 것

행렬 연산에서 행렬의 차원을 맞추기 위해 사용

코드

at = np.transpose(a) # a의 전치행렬 at
at = a.T # a의 전치행렬 at

2. 단위 행렬

행과 열이 같은 정사각형 모양에 행,렬이 같은 원소가 1, 나머지는 0인 행렬

어떤 행렬이든 단위행렬과 곱하면 행렬이 그대로 나온다.

코드

I = np.identity(3) # 3x3 단위행렬

3. 역행렬

어떤 행렬에 곱했을때 단위 행렬이 나오도록 하는 행렬

모든 행렬에 역행렬이 있는 것은 아님!!
역행렬은 정사가형 모양이어야 한다(결과로 단위행렬이 나와야 함)

코드

a_inv = np.linalg.pinv(a) # a의 역행렬 a_inv

np.linalg.pinv() 함수는 역행렬이 존재하지 않는 함수가 인자로 들어와도 최대한 역행렬과 비슷한 역할을 하는 행렬을 반환한다.

6. 행렬로 일차 함수 표현

7. 선형대수가 머신러닝에 필요한 이유

머신러닝을 할때 데이터를 일차식 형태(데이터의 가중치 * 데이터)f로 사용하는 경우가 많고 행렬을 이용하면 데이터의 식을 정돈된 형태로 효율적이게 계산 가능하다.

profile
능력 있는 개발자가 되기 위해 공부합니다.

0개의 댓글