'''
ํผ์
ํธ๋ก ์ธํฐํ์ด์ค ๊ฐ์ง ํ์ด์ฌ ํด๋์ค ์ ์
1. Perceptron ๊ฐ์ฒด ์ด๊ธฐํ ํ fit ๋ฉ์๋๋ก ๋ฐ์ดํฐ์์ ํ์ต
2. ๋ณ๋์ predict ๋ฉ์๋๋ก ์์ธก ์์ฑ
cf. ๊ฐ์ฒด ์ด๊ธฐํ ๊ณผ์ ์์ ์์ฑํ์ง ์๊ณ ๋ค๋ฅธ ๋ฉ์๋ ํธ์ถํ์ฌ ๋ง๋ ์์ฑ์ _ ์ถ๊ฐ
'''
import numpy as np
class Perceptron(object):
'''ํผ์
ํธ๋ก ๋ถ๋ฅ๊ธฐ
--------------
๋งค๊ฐ๋ณ์
--------------
eta : float
-> ํ์ต๋ฅ (0.0๊ณผ 1.0 ์ฌ์ด)
n_iter : int
-> ํ๋ จ ๋ฐ์ดํฐ์
๋ฐ๋ณต ํ์
random_state : int
-> ๊ฐ์ค์น ๋ฌด์์ ์ด๊ธฐํ๋ฅผ ์ํ ๋์ ์์ฑ๊ธฐ ์๋
--------------
์์ฑ
--------------
w_ : 1d-array
-> ํ์ต๋ ๊ฐ์ค์น
errors_ : list
-> ์ํฌํฌ๋ง๋ค ๋์ ๋ ๋ถ๋ฅ ์ค๋ฅ
'''
def __init__(self, eta=0.01, n_iter=50, random_state=1):
self.eta = eta
self.n_iter = n_iter
self.random_state = random_state
def fit(self, X, y):
'''ํ๋ จ ๋ฐ์ดํฐ ํ์ต
--------------
๋งค๊ฐ๋ณ์
--------------
X : {array-like}, shape = [n_samples, n_features]
-> n_samples๊ฐ์ ์ํ๊ณผ n_features๊ฐ์ ํน์ฑ์ผ๋ก ์ด๋ฃจ์ด์ง ํ๋ จ ๋ฐ์ดํฐ
Y : array-like, shape = [n_samples]
-> ํ๊ฒ ๊ฐ
--------------
๋ฐํ๊ฐ
--------------
self : object
'''
# numpy random number genarator
rgen = np.random.RandomState(self.random_state)
# rgen.normal(~) ์ด์ฉํ์ฌ ํ์ค ํธ์ฐจ๊ฐ 0.01์ธ ์ ๊ท ๋ถํฌ์์ ๋ฝ์ ๋๋คํ ์์ ์ ์ ์ฅ
self.w_ = rgen.normal(loc=0.0, scale=0.01, size=1 + X.shape[1])
self.errors_ = []
'''
fit ๋ฉ์๋๋
1. ๊ฐ์ค์น ์ด๊ธฐํ ํ ํ๋ จ ์ธํธ์ ์๋ ๋ชจ๋ ์ํ์ ๋ฐ๋ณต ์ํํ๋ฉฐ ํผ์
ํธ๋ก ํ์ต ๊ท์น์ ๋ฐ๋ผ ๊ฐ์ค์น ์
๋ฐ์ดํธ
2. ๊ฐ์ค์น ์
๋ฐ์ดํธ ์ํด predict ๋ฉ์๋ ํธ์ถํ์ฌ ํด๋์ค ๋ ์ด๋ธ์ ๋ํ ์์ธก ์ป์
'''
for _ in range(self.n_iter):
errors = 0
for xi, target in zip(X, y):
update = self.eta * (target - self.predict(xi))
self.w_[1:] += update * xi
self.w_[0] += update
errors += int(update != 0.0)
self.errors_.append(errors)
return self
def net_input(self, X):
# ์ต์ข
์
๋ ฅ ๊ณ์ฐ
return np.dot(X, self.w_[1:])+self.w_[0]
def predict(self, X):
# ๋จ์ ๊ณ๋จ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํด๋์ค ๋ ์ด๋ธ ๋ฐํ
return np.where(self.net_input(X) >= 0.0, 1, -1)
* self.w_ ๊ฐ์ค์น๋ฅผ 0์ผ๋ก ์ด๊ธฐํํ์ง ์๋ ์ด์ ?
๊ฐ์ค์น๊ฐ 0์ด ์๋์ด์ผ ํ์ต๋ฅ eta๊ฐ ๋ถ๋ฅ ๊ฒฐ๊ณผ์ ์ํฅ์ ์ค. ๊ฐ์ค์น๊ฐ 0์ผ๋ก ์ด๊ธฐํ๋์ด ์๋ค๋ฉด eta๋ ๊ฐ์ค์น ๋ฒกํฐ์ ํฌ๊ธฐ์๋ง ์ํฅ์ ๋ฏธ์นจ.
'Artificial Intelligence > Studying' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Logistic regression (0) | 2020.12.29 |
---|---|
Gradient descent (0) | 2020.11.14 |
Linear regression (0) | 2020.11.14 |
[๋จธ์ ๋ฌ๋ ๊ต๊ณผ์] Ch04 ์ข์ ํ๋ จ ์ธํธ ๋ง๋ค๊ธฐ : ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ (0) | 2020.11.01 |
[๋จธ์ ๋ฌ๋ ๊ต๊ณผ์] Ch03 ๋ด์ฉ ์ ๋ฆฌ (์์ง ์์ ์ค) (0) | 2020.09.29 |