이번엔 파이썬으로 Adaline 알고리즘을 구현해 본다. 코드분석은 아래에 작성되어 있다.
이 Adaline 알고리즘은 Perceptrron모델 알고리즘에 기초하여 fit Method 부분만 수정하여 만들어진 알고리즘이다.
Adaline 알고리즘은 아래와 같다.
*import numpy as np
class AdalineGD(object):
파이썬 수학 라이브러인 numpy를 np로 로드한다. numpy는 subroutine이므로, numpy의 method를 따로 정의하지 않고 where 이나 zeros 를 사용할 수있다.
대신 AdalineGD는 따로 class선언했기 때문에 Adline의 method는 class 내부에서만 작동하며, 현재 파일을 저장하고 함수를 실행할때, 따로 로드해주어야 한다.
* def __init__(self, eta = 0.01, n_iter = 50):
self.eta = eta
self.n_iter = n_iter
여기서는 adaline의 parameter를 정의한다. eta는 Learning rate (학습률)이다. 수식에서 η를 의미한다. 따로 eta값을 정의하지 않는다면 adaline을 사용할때, 초기 값은 항상 0.01로 시작한다.
n_iter는 Training 횟수이다. 데이터를 얼마나 훈련할지 설정한다. 이 또한 따로 정의하지 않는다면 50회로 시작할 것이다. self는 object를 의미한다. eta와 n_iter를 object로 정의한다.
* def fit(self, X, y):
self.w_ = np.zeros( 1 + X.shape[1])
self.cost_ = []
np.zeros는 numpy에 있는 Method이다. np.zeros()은 ()안에 있는 수 만큼 비어있는 공간을 만든다. self.w_에 1+X.shape[1] 공간을 만들어 준다. self.w_의 가중치를 제로벡터로 초기화 하며, 여기에 1을 더하여 임계치를 설정했다.
self.errors_ = []는 예측값과 실제 값에 의해 발생하는 오차를 저장하는 공간을 만들어 준다. errors의 공간을 만든다.
*for i in range(self.n_iter):
output = self.net_input(X)
errors = (y - output)
self.w_[1:] += self.eta * X.T.dot(errors)
self.w_[0] += self.eta * errors.sum()
cost = (errors**2).sum() / 2.0
self.cost_.append(cost)
return self
이 부분이 Adaline model의 모든 것을 담고 있는 부분이다. 먼저 for 조건 문이므로, 변수 i가 n_iter 학습 차수 만큼 반복 될 것이다. 그리고 output을 activation에 있는 선형적인 X값을 취해 온다. 이는 코드 아랫부분에 정의되어 있다. perceptron에서는
Comments