사이킷런 머신러닝 패키지로 널리 사용된다. Numpy, Scipy와 상호 운용되도록 설계되었다. 사이킷런의 경사 하강법이 구현된 클래스는 SGDClassifier이다. 이 SGDClassifier를 이용하여 로지스틱 회귀 문제를 해결해 보자. 사이킷런으로 경사 하강법 적용 로지스틱 손실 함수 지정 sgd = SGDClassifier(loss = 'log', max_iter=100, tol=1e-3, random_state=42) loss를 'log'로 지정한다. max_iter는 반복 횟수를 나타내는 매개변수로 100번 반복한다. random_state를 통해 난수 초깃값을 42로 설정한다. tol은 반복할 때 로지스틱 손실 함수의 값이 변경되는 정도를 컨트롤한다. 만약 tol에 설정한 값보다 적게 변경..
일반적인 신경망 일반적으로 신경망은 다음과 같이 표현된다. 가장 외쪽이 입력층, 가장 오른쪽이 출력층 그리고 가운데 층들은 은닉층이라고 부른다. 오른쪽에 작은 원은 활성화 함수이다. 단일층은 은닉층이 없이 입력층 출력 층만 존재하는 모델이라 생각하면 된다. 단일층의 모델은 다음과 같다. 앞에서 구현한 LogisticNeruon을 조금 변형하여 단일층 신경망을 만들어 보자. 손실 함수 결과 저장 변수를 추가하여 손실 함수의 결과값을 저장할 리스트 self.losses를 만든다. 샘플마다 손실 함수를 계산하고 평균을 내어 저장한다. 하지만 np.log( )계산을 위해 한번 더 조정해야 한다. a가 0에 가까워지면 -∞에 가까워지고, 1에 가까워 지면 0에 가까워지기 때문에 np.clip( )를 이용해 조정한..
로지스틱 회귀 뉴런 만들기 우선 __init__(), forpass(), backprop()은 앞서 만든 뉴런과 별로 다르지 않다. class LogisticNeuron: def __int__(self): self.w = None self.b = None def forpass(self, x): z = np.sum(x * self.x) + self.b return z def backprop(self, x, err): w_grad = x * err b_grad = 1 * err return w_grad, b_grad forpass에서 np.sum은 numpy모듈에서 sum이라는 메서드를 이용하여 가중치와 입력의 곱을 더하는 것이다. 훈련 활성화 함수라는 것이 추가되었기 때문에 fit()함수를 조정해야 한다...
로지스틱 손실 함수 로지스틱 손실 함수는 다중 분류를 위한 손실 함수인 크로스 엔트로피(cross entropy) 손실 함수를 이진 분류 버전으로 만든 것이다. a를 활성화 함수가 출력한 값이고 y는 타깃이라 하자. L = -( y * log(a) + (1 - y) * log(1-a)) 그렇다(1), 아니다(0)라는 식으로 2개의 정답만 있기 때문에 왼쪽과 오른쪽이 반대가 되는 상황입니다. 식을 최소로 만들다 보면 a의 값이 우리가 원하는 목표치가 된다. 이제 가중치와 절편을 찾기 위해 미분만 하면 된다. 로지스틱 손실 함수 미분하기 로지스틱 손실 함수를 미분하면 다음과 같다. 함수를 기울기(가중치)와 절편에 대해 편미분을 진행하면 다음 식이 나온다. 이 식을 자세히 보면 앞에서 사용한 제곱 오차를 미분..