AI/Machine Learning

[Python] 머신러닝 기초-10 Logistic Regression 과 이진분류 / 다중분류 활용

Jeong Jeon
반응형

자 지난 게시글에 이어 이제 로지스틱 회귀로 이진분류/다중분류를 해보려고한다.

 

 

첫번째 이진분류

  • 우리는 이진 분류를 통해 bream과 smelt인것만 골라내서 둘중에 어떤것에 더 높은 확률을 보이는지 확인해보자.

이진 분류를 사용하여 Bream | (또는) Smelt일때의 index들을 추출해 냈다.

그다음 훈련세트를 다시 만들어주었고, 해당 데이터를 로지스틱 회귀를 적용시켜보았다.

우리가 만든 모델이 예상한 데이터는 [Bream, Smelt, Bream, Bream, Bream,Smelt]이다.

이 예측값이 나온 이유 = 확률에 대해 확인하기 위해 lr.predict_proba()함수를 사용했다.

 

==> 결과 : 1열 : Bream과 2열 : Smelt 로 보았을때 어떤 확률로 예측데이터가 나온지 알수있다.

 

우리는 로지스틱 회귀 모델이 학습한 방정식을 지난 시간에 확인했었다.

다시 보면 

  • z = a x (Weight) + b x (Lenght) + c x (Diagonal) + d x (Height) + e x (Width)+f

 

우리는 우리가 만든 모델을 통해 z , a, b, c, d, e, f를 확인 할 수 있다.

a = -0.404

b = -0.576

c = -0.663

d = -1.013

e = -0.731

f = -2.161

 

  • 우리가 구한 계수들을 통해 이제는 z값을 확인 해보자

이렇게 우리는 우리가 보고자하는 6개의 샘플에 대해 z값을 확인 할 수 있엇으며,

그 z값을 통해 6개의 데이터가 bream과 smelt 중 어떤것에 더 일치하는지 확률을 확인 할 수 있었다.

 

두번째 다중분류

 

  • 다중분류를 하기위한 LogisticRegression을 설정해준다.
  • 훈련!

점수는 과대적합, 과소적합 없이 잘 나왔다.

5개 샘플에 대한 예측을 해보자

 

  • 5개 샘플에 대한 예측확률을 출력해본다.

7개 클래스에 대한 확률이기 때문에 7열이 나오게 된다.

 

  • 계수를 한번 확인해 보자

우리가 사용한 데이터의 특성은 총 5개였었다. 그러므로 5열의 데이터가 나오며, 클래스의 갯수가 7개이기 때문에 7행의 데이터가 나오게 된다.

=> 다중분류는 각 클래스마다 z값을 계산한다.

=> z값중 가장 큰 값을 출력하는 클래스가 예측 클래스가 되는방식.ㅓ

 

이진 분류에서는 시그모이드함수를 사용하여 z를 0~1사이의 값으로 변환했었다.

다중 분류에서는 소프트맥스 함수를 사용하여 z를 확률로 변환한다.

공식은... 작성하기가 너무 힘들어서...패스..! 어렵게 가지말자!

 

자 그럼 소프트맥스 함수를 사용하여 z값을 확률로 변환해보자

=> 결과 : 이전에 proba데이터와 소프트 맥스함수를 통해 확률을 구한 데이터가 일치한다.

잘 나온 결과이다.

 

이렇게

이진분류는 하나의 선형 방정식을 사용하여 훈련하며, 시그모이드 함수를 적용시켜 0~1사이의 값을 만들어낸다.

이 값이 바로 양성클래스(우리가 정해놓은)에 대한 확률이다.

 

다중분류는 클래스의 개수만큼 방정식을 훈련하는 방식이다. 그다음 방정식의 출력값을 소프트맥스 함수에 적용시켜 전체 클래스에 대한 결과값이 1이되게 만든다. => 각각의 값은 클래스에 대한 데이터의 확률이라고 생각하면 된다.

 

 

반응형