Logistic Regression은 데이터가 어떤 범주에 속할 확률을 0~1사이의 값으로 예측하고 그 확률에 따라 가능성이 더 높은 범주에 속하는 것으로 분류해주는 지도 학습 알고리즘입니다.

예를 들어, 어떤 메일을 받았을 때 그것이 스팸일 확률이 0.5이상이면 스팸으로 분류하고, 0.5보다 작을 경우 정상 메일로 분류하는 겁니다.

이렇게 데이터가 2개의 범주 중 하나에 속하도록 결정하는 것2진 분류(binary classification)라고 합니다.

확률이지만 확률 밀도함수는 아닌...? 그런 녀석

H(x)는 x가 1일 확률이고 위와 같이 표현하는 방식이 여러개인것 같습니다.

 

※ 참고:

http://hleecaster.com/ml-logistic-regression-concept/

https://ratsgo.github.io/machine%20learning/2017/04/02/logistic/

 


 

Sigmoid 함수

위와 같이 Logistic Regression을 만족하는 함수로 sigmoid를 사용합니다.

sigmoid 함수를 이용해서 0~1 사이의 값을 가질수 있게 해주는 함수입니다.

Sigmoid

※ 참고: https://icim.nims.re.kr/post/easyMath/64

 


 

Logistic Regression 작성

일단 필요한 module을 import 시켜줍니다.


사용할 data 및 w(weight), b(bias)를 선언해줍니다.

 


 

hypothesis를 선언해 줍니다.

왼쪽은 sigmoid 식을 그대로 선언한 것입니다.

하지만 torch에서는 torch.sigmoid()를 이용해 간단하게 사용할 수 있습니다.


 

log loss function

Logistic Regression에서 사용할 loss함수를 선언해 줍니다.

losses는 log loss 함수를 그대로 선언한 것입니다.

하지만 log loss 역시도 F.binary_cross_entropy()를 이용해 간단하게 사용할 수 있습니다.

※ F = torch.nn.functional

※ 여기서 Linear Regression에서 사용한 Cost 함수를 사용하지 않은 이유!

    - sigmoid 함수는 비선형적인 함수입니다. 그래서 제곱을 해주게 되면 Cost 함수는

      위와 같이 엄청난 비선형적인 형태와 비슷한 형태가 될것입니다.

      경사하강법(Gradient Descent)을 사용하게 되면 우리가 원하는 2번을 얻을 수도 있지만 1,3,4번에 정체되어 있을

      확률이 상당히 높습니다.

      이러한 이유로 Logistic Regression에서는 Cost함수로 Log loss 함수를 사용하게 됩니다.


Training

위에서 선언한 hypothesis, cost 를 이용해 학습을 합니다.


Evaluation

여기서는 학습된 w, b가 얼마나 정확히 학습이 됐는지 확인해보겠습니다.

0 또는 1로 나타내주기 위해서 hypothesis >= torch.FloatTensor([0.5])를 사용했습니다.

0.5보다 크다면 1, 0.5보다 작으면 0으로 바꿔줍니다.

True = 1, False = 0


prediction.float() == y_train: 값이 같으면 True, 다르면 False.

학습이 잘 된것을 확인할 수 있습니다.

 


실제로 사용할때!!!

'Deep Learning > Pytorch' 카테고리의 다른 글

09_Pytorch_Softmax_Classifier MNIST  (0) 2021.08.25
08_Pytorch_Softmax_Classification  (0) 2021.08.18
05_Pytorch_nn.Module  (0) 2021.08.13
04_Pytorch_Multivariate_Linear_Regression  (0) 2021.08.12
03_Pytorch_Linear_Regression  (0) 2021.08.12

+ Recent posts