자 지난 게시글에 이어 이제 로지스틱 회귀로 이진분류/다중분류를 해보려고한다.
첫번째 이진분류
- 우리는 이진 분류를 통해 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이되게 만든다. => 각각의 값은 클래스에 대한 데이터의 확률이라고 생각하면 된다.
'AI > Machine Learning' 카테고리의 다른 글
[Python] 머신러닝-11 점진적 학습을 위한 확률적 경사하강법 / 확률적 경사하강법이란? (0) | 2021.01.20 |
---|---|
[Python] 머신러닝 기초-9 로지스틱 회귀를 통해 물고기 분류 예제 / 로지스틱 회귀란? (0) | 2021.01.19 |
[Python] 머신러닝 기초-8 복습하고 가자 - > Ridge Regression Example 쭉 쳐보기 (0) | 2021.01.19 |
[Python] 머신러닝 기초-7 Ridge Regression 과 Lasso Regression을 통한 연습 / Ridge란? / Lasso란? (0) | 2021.01.18 |
[Python] 머신러닝 기초-6 다중회귀(Multiple Regression) 알고리즘을 통한 연습 / 다중회귀란? (0) | 2021.01.18 |