-
[기계학습] 로지스틱 회귀(분류 Classification)(Logistic Regression) (Part 1/2)코딩(Coding)/기계학습 2022. 1. 21. 11:29728x90
로지스틱 회귀(분류)
앞서 포스팅했던 선형회귀는 학습한 데이터를 기반으로 새로운 데이터에 대한 Output을 예측하는 문제라고 설명할 수 있겠다. 하지만, 로지스틱 회귀는 반대로 좌표평면상의 데이터를 각 그룹(class)으로 분류(classification)하는 것이다.
다음과 같은 데이터에 대해서 선형회귀를 적용한다고 가정한다면,
위 그림처럼 직선이 그려질 것이다. 이 직선을 토대로 x가 5를 기준으로 성공/실패를 분류 할 수 있을 것이다.
하지만, 문제는 아래에서 발생한다.
만약 새로운 데이터 (20, 성공)이 있다면, x가 10을 기준으로 성공/실패를 분류할 것인데, 예외로 (9, 성공)이 분류에 실패하게 될 것이다.
따라서 해결방법으로 새로운 함수를 도입한다.
바로 시그모이드(Sigmoid) 함수이다.함수식은 아래와 같다.
$$
Sigmoid(z) = \frac{1}{1 + e^{-z}}
$$
시그모이드 함수는 위 그림에서 처럼 비선형적인 형태를 띈다.
시그모이드 함수는 무조건 0과 1사이의 값을 가지는 활성화 함수이다.
이 밖에 분류에 사용되는 활성화 함수는 tanh이나 계단함수 등등이 있다.기존의 데이터를 가장 잘 대변하는 직선을 찾는 선형회귀 문제에서 더 나아가 가설 직선을 시그모이드에 대입하여 분류를 잘 하도록 하는 문제이다.
- $$
H(x) = Wx + b
$$ - $$
z = H(x) = Wx + b \\
g(z) = \frac{1}{1+e^{-z}} \\
g(x) = \frac{1}{1+e^{-(Wx + b)}}
$$
최종적으로, 우리는 주어진 데이터를 가장 잘 분류하는 가설 g(z)를 찾는 것이고 똑같이 W와 b를 찾는 것이다.
활성화 함수?
- 보통 분류 문제는 One-Hot으로 표현된 데이터이다. 이는 연속된 데이터가 아니라 딱딱 끊어져 표현된 데이터이다.
- A, B, C라는 3개의 클래스가 있다면,
- [1, 0, 0] : A
- [0, 1, 0] : B
- [0, 0, 1] : C
- 따라서, 이 데이터를 "선형"으로 표현하는데에는 한계가 있다.
- 음과 양의 방향으로 무한으로 뻗어가는 직선의 특징 때문
- 따라서 새로운 함수가 필요한데, 새로운 함수는 비선형적인 특징을 가진 함수를 뜻한다.
- 대표적으로 비선형성을 가진 함수는 앞서 설명했던 Sigmoid 함수가 있다.
- 이 밖에도 딥러닝에서 사용하는 활성화 함수는 여러가지가 있다.
- 특히 요즘에는 Relu를 사용한다.
- 가중치 손실(Gradient Vanishing)을 최소화 해준다.
- 특히 요즘에는 Relu를 사용한다.
- 그렇다면 왜 활성화 함수를 사용하는가?
- 선형적인 단순함을 추구하기 보다는 비선형성을 주어 모델(가설)의 복잡성을 주기 위함이다.
- 지금 포스팅하는 로지스틱 회귀는 비록 1개의 Layer밖에 없지만, 이후 설명하게 될 딥러닝 관점에서는 직선을 여러개 만드는 것보다 비선형성을 주어 가설(모델)의 복잡함을 추가하여 강력한 모델을 구현한다.
가설 정의
자 다시 돌아와서, 그럼 분류 문제에서는 가설정의를 어떤식으로 하는가?
위 그림이 로지스틱 회귀에서의 가설부분이다.
- 입력 X가 모델에 input으로 들어가고
- 데이터를 가장 잘 대변하는 직선과 활성화 함수(Sigmoid)를 거친다음
- 0~1사이의 값을 0.5를 기준으로 분류하여 Y값(Label)을 얻어낸다.
그렇다면, 분류 문제의 가설를 정의했으니
- $$
z = H(x) = Wx + b \\
g(z) = \frac{1}{1+e^{-z}} \\
g(x) = \frac{1}{1+e^{-(Wx + b)}}
$$
다음은 Cost함수를 정의할 차례이다.
오차 정의
- 앞서 설명했던 선형회귀에선 실제 값(Label)과 가설직선(Output)간의 차이를 제곱하여 평균을 통해 오차를 정의하였다.
- 분류 문제에 대해서도 해당 문제가 적용될까?
- $$
Cost(W, b) = \frac{1}{m}\sum_{i=0}^m((g(x_i) - Y_i)^2)
$$ - 해당 오차함수에는 문제가있지 않을까? 아래 그래프를 살펴보자
-
- 그래프를 보면 전체적으로 Cost를 최소로하는 W,b 값이 존재하지만, 경사하강법을 적용할 수 없다.
- 그 이유는 해당 오차함수는 Convex하지 않기 때문이다. 즉 최적의 값으로 수렴하지 못하고 Local Minima에 빠질 우려가 있다는 것이다.
- 즉, 접선의 기울기가 0이 되는 부분이 여럿 존재하다는 의미이다.
- 그림을 살펴보아도 접선의 기울기가 0이되는 부분이 많다.
- 따라서 새로운 Cost 함수를 정의해야한다.
- 바로 Cross-Entropy 함수이다.
- 모양도 완만한 곡선이기에 경사하강법을 적용할 수 있다.
- 해당 함수는 오차 함수의 정의에 충실하게 설계되었다.
- 실제 값과 같으면 값은 작아지고, 실제 값과 다르면 값은 커진다.
오차 최소화
- 오차 최소화는 Cost함수를 최소화하는 최적의 W와 b를 찾는 과정이다.
- 이 문제를 해결하기 위해
경사하강법
을 사용하여 최적의 W,b를 찾아낸다.
정리
다변수 분류
여기까지 공부하면 우리는 0과 1만을 구분 할 수 있는 것이다. 즉,
이진분류
를 공부한 것이다.
세상에는 여러가지 Class로 구분되는데, 여러가지 Class에 대해서 분류할 수 없는 것일까?- 예시로 3개의 클래스로 분류하는 문제에서,,,
- 정답은 간단하다. 우리는 3개의 Logistic 회귀를 적용하면 된다.
- 즉 직선을 3개를 만들고 3개의 직선을 모두 Sigmoid함수에 대입하면 된다.
- 한개의 가설은 A인지(1) 아닌지(0)
- 두번째 가설은 B인지(1) 아닌지(0)
- 마지막 가설은 C인지(1) 아닌지(0)
다변수 분류도 행렬로 처리
- 3개의 Logistic 회귀를 사용한다고 했는데, 연산관점에서 볼때, 모두 행렬로 표현이 가능하다.(그림참조)
- 결국 다변수 분류 또한 가장 간단한 Wx + b로 표한이 가능하다는 의미이다.
Softmax 함수
- 최종적으로 우리는 입력값 X를 대입하면 3개의 output을 얻는 것이다.
- 이 3개의 output은 각각 무엇을 의미하는 것일까?
- 바로, 입력 X가 각 클래스에 해당할 확률을 의미한다.
- 하지만 확률이라기엔 값이 크기 때문에 0~1사이의 값(합은 1)으로 표현해 줘야한다.
- 이때 사용하는 함수로 Softmax 함수를 사용한다.
- 위 과정을 가쳐 모델이 출력한 3개의 output을 소프트맥스 함수를 통해 확률로 표현하고
- 확률 중에서 가장 높은 값을 1로 나머지는 0으로 표현하여 one-hot 인코딩한다.
- 위 까지 완료하면 우리가 가진 Y(Label)값과 같기에 오차를 구할 수 있게 된다.
오차와 오차 최소화
- 오차는 Cross-Entorpy를 사용한다.
- $$
D(S,L) = -\sum_{i=0}^m(L_i log(S_i))
\\ L_i : 실제 Y 값
\\ S_i : 예측 값 = S(H(x))
$$
- $$
- 오차 최소화 또한 경사하강법을 통해 최소화한다.
정리
다음 포스팅은 Logistic 회귀를 직접 코드로 구현해보는 실습을 포스팅을 작성할 예정이다.
포스팅에 사용된 ppt는 pdf 형식으로 제 Github에서 다운받을 수 있습니다.
https://github.com/JoSangYeon/Machine_Learning_Project/blob/master/PPT/01.%20Machine%20Learning.pdf728x90'코딩(Coding) > 기계학습' 카테고리의 다른 글
[기계학습] IRIS 데이터를 분류하는 분류기를 만들어보자(코드 실습) (0) 2022.02.08 [기계학습] 로지스틱 회귀(분류 Classification)(Logistic Regression) (Part 2/2) (0) 2022.01.25 [기계학습] 선형회귀(Linear Regression) (Part 2/2) (0) 2022.01.18 [기계학습] 선형회귀(Linear Regression) (Part 1/2) (0) 2022.01.11 [기계학습] 기계학습(Machine Learning) 기본 개념 (0) 2022.01.10 - $$