๋ฐ์ํ
๋๋ณด๊ธฐ
๊ธฐ์กด ๋ถ์บ ๋ ๋
ธ์
์ ๊ฐ์ธ์ ์ผ๋ก ์ ๋ฆฌํ ๊ฒ์ ๊ณต๋ถํ ๊ฒธ ์์ฑํ ๊ธ์
๋๋ค.
๊ฐ์ธ์ ์ผ๋ก ํด์ํด์ ์์ฑํฉ๋๋ค. (ํ๋ฆด ์ ์์. ์ ์ ์์ฒญ ์๋งใ
)
** ๊ฐ์์๋ฃ๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค **
** ์์
์ ์ด์ฉ์ ๊ธ์งํฉ๋๋ค **
Today's Keyword
ํ๋ ฌ ๊ณฑ์ , ํ๋ ฌ ๋ด์ , ํx์ดy,
ํ๋ ฌ
- ๋ฒกํฐ๋ฅผ ์์๋ก ๊ฐ์ง๋ 2์ฐจ์ ๋ฐฐ์ด
- ํ๋ฒกํฐ(row), ์ด๋ฒกํฐ(column)
- ๋ฒกํฐ๊ฐ ๊ณต๊ฐ์์ ํ ์ ์ ์๋ฏธํ๋ค๋ฉด, ํ๋ ฌ์ ์ฌ๋ฌ ์ ๋ค์ ๋ํ๋.
- ๊ฐ์ ๋ชจ์์ด๋ฉด
- ๋ง์ , ๋บ์
- ์ฑ๋ถ๊ณฑ (๊ฐ ์ธ๋ฑ์ค ์์น๋ผ๋ฆฌ ๊ณฑํ๊ธฐ) X * Y = (Xij Yij)
- ์ค์นผ๋ผ๊ณฑ aX = aXij
- vector ๊ณต๊ฐ์์ ์ฌ์ฉ๋๋ ์ฐ์ฐ์ operator๋ก ์ดํด.
- ํ๋ ฌ๊ณฑ์ผ๋ก ๋ฒกํฐ๋ฅผ ๋ค๋ฅธ ์ฐจ์ ๋ณด๋ด๋ฒ๋ฆฌ๊ธฐ.
- ํจํด์ ์ถ์ถํ ์ ์๊ณ , ๋ฐ์ดํฐ๋ฅผ ์์ถํ ์๋ ์์.
- ๋ชจ๋ ์ ํ๋ณํ linear transform์ ํ๋ ฌ๊ณฑ์ผ๋ก ๊ณ์ฐํ ์ ์๋ค.
์ ์นํ๋ ฌ X^T
- ํ๊ณผ ์ด์ ์ธ๋ฑ์ค๊ฐ ๋ฐ๋
- ๋๊ฐ์ผ๋ก
- xn1 <-> x1m
ํ๋ ฌ ๊ณฑ์ ; Matrix multiplication
- i๋ฒ์งธ ํ ๋ฒกํฐ์ j๋ฒ์งธ ์ด๋ฒกํฐ ์ฌ์ด์ ๋ด์ ์ ์ฑ๋ถ์ผ๋ก ๊ฐ์ง๋ ํ๋ ฌ ๊ณ์ฐ
- ํฌ๋ก์ค๋ก ๊ณ์ฐํ๋ค
import numpy as np
X = np.array([[1, -2, 3],
[7, 5, 0],
[-2, -1, 2]])
Y = np.array([[0, 1],
[1, -1],
[-2, 1]])
X @ Y
# n11 = 1*0 + -2*1 + 3*-2 = -8
# n12 = 1*1 + -2*-1 + 3*1 = 6
# n21 = 7*0 + 5*1 + 0*-2 = 5
# n22 = 7*1 + 5*-1 + 0*1 = 2
# n31 = -2*0 + -1*1 + 2*-2 = -5
# n32 = -2*1 + -1*-1 + 2*1 = 1
ํ๋ ฌ ๋ด์ np.inner
- i ๋ฒ์งธ ํ๋ฒกํฐ์ j ๋ฒ์งธ ํ๋ฐฑํฐ ์ฌ์ด์ ๋ด์ ์ ์ฑ๋ถ์ผ๋ก ๊ฐ์ง๋ ํ๋ ฌ
- ์ํ์ ๋ด์ ๊ณผ๋ ๋ค๋ฅด๋ค !!! (์ด์ฐ ํท๊ฐ๋ฆฌ๊ฒ)
import numpy as np
X = np.array([[1, -2, 3],
[7, 5, 0],
[-2, -1, 2]])
Y = np.array([[0, 1, -1],
[1, -1, 0]])
np.inner(X, Y)
# n11 = 1*0 + -2*1 + 3*-1 = -5
# n12 = 1*1 + -2*-1 + 3*0 = 3
# n21 = 7*0 + 5*1 + 0*-1 = 5
# n22 = 7*1 + 5*-1 + 0*0 = 2
# n31 = -2*0 + -1*1 + 2*-1 = -3
# n32 = -2*1 + -1*-1 + 2*0 = -1
์ญํ๋ ฌ ; inverse matrix A^-1
- ํ = ์ด
- ํ๋ ฌ์ determinant ๊ฐ -์ด ์๋ ๊ฒฝ์ฐ์๋ง ๊ณ์ฐ.
- AA^-1 = A^-1A = I (ํญ๋ฑํ๋ ฌ)
- ์ญํ๋ ฌ ๊ณ์ฐํ ์ ์๋ค๋ฉด
- ์ ์ฌ์ญํ๋ ฌ (pseudo-inverse)
- ๋ฌด์ด-ํ๋ก์ฆ (Moore-Penrose)
์ด๋ฅผ ์์ฉํด์ ์ ํํ๊ท๋ถ์์ ํด๋ณด์ (linear model)
- X : input array
- y : output array
- b : ํ๊ท ๊ณ์ ๋ฒกํฐ
# ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ํฌํธ
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
# ๋ฐ์ดํฐ ์์ฑ
x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]).reshape(-1, 1)
y = np.array([-1, 2, 5, 7, 10, 12, 15, 16, 18, 21])
# ์ ํํ๊ท ๋ชจ๋ธ ํ์ต
model = LinearRegression()
model.fit(x, y)
y_test = model.predict(x_test)
# Moore-Penrose ์ญํ๋ ฌ์ ์ฌ์ฉํ ๋ฐฉ๋ฒ
X_ = np.array([np.append(x, [1]) for x in X]) # intercept ํญ ์ถ๊ฐ (y์ ํธ)
beta = np.linalg.pinv(X_) @ y
y_test = np.append(x, [1]) @ beta
- y์ ํธ ํญ(intercept)๋ฅผ ์ถ๊ฐํด์ค์ผ ์์ linearregressionํ๋ ๊ฒ๊ณผ ๋๊ฐ์ด ๋์จ๋ค.
ipynb๋ก ํ๋ํ๋ ๋ณด๋ ๊ฒ๋ ์ข์ง๋จผ ์ฌ๊ธฐ์ ์์ ํ์ฌ ์๊ฐํ ํด๋ด์ ๋น๊ตํ๋ ๊ฒ๋ ์ข๊ฒ ๋ค. !
๋ฐ์ํ
'AI ๊ณต๋ถ ํญ์ํ์ > ๊ด๋ จ ์ด๋ก ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Math] Gradient Descent (์ฐฉํ๋ฏธ๋ถ๋ง) (1) | 2024.12.16 |
---|---|
[Math] ๋ฒกํฐ๋ฅผ ์์๋ณด์ (1) | 2024.11.22 |