-
[PyTorchZerotoAll 내용정리] 06 Logistic(sigmoid) Regression = Linear classificationML&DL 이야기/Pytroch 2023. 8. 27. 13:49
Linear regression의 경우 우리의 예측 값은 실수형태로 떨어졌다. 즉, 연속된 값을 가정하였다.
이번에는 Binary prediction이 필요한 경우, 즉, 카테고리 분류나 O,X 분류가 필요한 경우를 가정해보자.
실생활에서 이와 같은 경우는 위와 같이, 기나 아니냐 라는 케이스가 대다수이다.
Classfication = Logistic Regression
0,1로 결과값을 제약하려면 어떤 함수가 필요할까??
우리는 Sigmoid함수를 이용할 수 있다.
이런 함수를 activation 함수라고도 하는데, 시그모이드 함수는 그 함수의 특성상 0을 기준으로 값이 급격하게 1로 가까워지거나 0으로 가까워지는 특성이 있다.
즉, 과 1 사이의 실수 결과가 나온다면 특정한 임계치를 정하고 그 이상이면 1로 판단하고, 그것보다 작으면 0으로 판단할 수 있는 것이다.
Cross Entropy loss
동시에 이에 맞추어 우리는 새로운 Loss function을 정의한다. 이는 CE, Cross Entropy loss이다.
이를 사용하는 이유는 기존의 MSE loss의 경우 convex한 형태였기에 global minimum을 찾는 것에 문제가 없었다.
$$J(\theta_1,...\theta_n) =\frac{1}{2m}\Sigma(h_\theta(x_i)-y_i)^2 = \frac{1}{2m}\Sigma(\theta^TX-y^{(i)})^2$$
그러나 이를 logistic regression 식에 사용하는 경우 non-convex한 형태로 식이 나오게 된다.
$$J(\theta_1,...\theta_n) =\frac{1}{2m}\Sigma(h_\theta(x_i)-y_i)^2 = \frac{1}{2m}\Sigma(sigmoid(\theta^TX)-y^{(i)})^2$$
그럼으로 이를 보정하기 위해 새로운 cost function이 필요한 것이다.
어떤 상황에서 어떤 손실함수를 써야할지는 문제의 해석에 따라 달라지기도 한다.
이에 관한 정리는 아래에 되어있다.
https://secundo.tistory.com/68
Implementation
https://colab.research.google.com/drive/1QB72fSRQTZihbzbp8qf7cf-jRWZFy4Ax#scrollTo=DlW0pSpXyGoP
logistic regression의 구현은 아래와 같다.
sigmoid함수의 경우 기존 torch.nn.functinal에 잘 정의되어있다.
또한 BCE loss의 경우에도 정의되어있는 것을 이용한다.
이에 따른 최종 코드는 아래와 같다.
'ML&DL 이야기 > Pytroch' 카테고리의 다른 글
[PyTorchZerotoAll 내용정리] 08 DataLoader & Dataset (0) 2023.09.04 [PyTorchZerotoAll 내용정리] 07 Wide(다변량) & Deep(gradient vanishing problem) (0) 2023.08.30 [PyTorchZerotoAll 내용정리] 05 Linear Regression in pytorch(pytorch Project 개발순서 익히기) (0) 2023.08.23 [PyTorchZerotoAll 내용정리] 04 Back propagation (0) 2023.08.16 [PyTorchZerotoAll 내용정리] 03 Gradeint Descent (0) 2023.08.15