타깃 클래스가 2개 이상인 분류 문제. 로지스틱 회귀는 다중 분류를 위해 소프트맥스 함수를 사용하여 클래스를 예측한다.
위와 같이 모델을 만들고 훈련하는 방식은 이진 분류와 동일하다
이진 분류 - 양성 클래스와 음성 클래스를 1과 0으로 지정하여 타깃 데이터 생성
다중 분류 - 다중 분류도 타깃값을 숫자로 바꾸어 입력할 수 있지만, 사이킷런에서는 문자열로 된 타깃값을 그대로 사용 가능
❌ 주의할 점 ❌
predict() 메서드로 테스트 세트의 첫 5개 샘플의 타깃값 예측
테스트 세트에 있는 처음 5개 샘플에 대한 확률 출력
넘파이 round() 함수 : 기본적으로 소수점 첫째 자리에서 반올림. decimals 매개변수로 유지할 수수점 아래 자릿수 지정 가능
결과 해석
행은 샘플, 열은 확률.
- 첫 번째 샘플인 Perch 는 세번째 열인 Perch일 확률이 1이다.
- 다섯번째 샘플인 Perch 는 세번째 열인 Perch일 확률이 0.6667이며 다섯번째 열인 Roach일 확률이 0.3333 이다.
확률이 0, 1/3, 2/3, 1 밖에 나오지 않는 한계
더 나은 확률 값을 얻기 위해 로지스틱 회귀
를 알아보자.
선형 방정식을 사용한 분류 알고리즘. 선형 회귀와 달리 시그모이드 함수나 소프트맥스 함수를 사용하여 클래스 확률을 출력할 수 있다.
선형 방정식의 출력을 0과 1사이의 값으로 압축하며 이진 분류를 위해 사용한다.
시그모이드 함수
왼쪽이 시그모이드 함수, 오른쪽이 시그모이드 그래프
x값이 -∞ ~ +∞
일 때, y값은 1.0 ~ 0
으로 제한 된다.
시그모이드 함수에 넣어서 확률로 바꾼다음
0.5를 기준으로 0.5보다 크면 양성클래스,
0.5보다 작으면 음성 클래스로 분류한다.
그러나 z값만 봐도 알 수 있다
z값이 양성이면 양성클래스
z값이 음성이면 음성클래스
🎉 기본 미션
로지스틱 회귀가 이진 분류에서 확률을 출력하기 위해 사용하는 함수는 무엇인가요?
답: ① 시그모이드 함수
불리언 인덱싱
을 사용하여 7개 생선 종류(타깃 클래스)를 2가지만 남도록 만든다.
불리언 인덱싱
: 넘파이 배열에 True, False 값을 전달하여 행을 선택하는 것
불리언 인덱싱을 사용하여 훈련 세트에서 도미와 빙어의 행만 골라낸다
이를 통해 준비된 데이터로 로지스틱 회귀 모델을 학습해 보자
predict_proba() 메서드로 train_bream_smelt 에서 처음 5개의 샘플의 예측 확률 출력
샘플마다 2개의 확률이 출력된다
첫 번째 열 : 음성 클래스(0) 에 대한 확률
두 번째 열 : 양성 클래스(1) 에 대한 확률
어떤 것이 양성 클래스고 음성 클래스인지 classes_속성으로 확인
음성 클래스 : 도미 (Bream)
양성 클래스 : 빙어 (Smelt)
따라서 predict_proba() 메서드가 반환한 배열 값 중 두 번째 샘플만 양성 클래스인 빙어의 확률이 높다
로지스틱 회귀가 학습한 계수 확인
따라서 이 로지스틱 회귀 모델이 학습한 방정식은 아래와 같다
z = -0.404 x (무게) - 0.576 x (길이) - 0.663 x (대각선) - 0.013 x (높이) - 0.732 x (두께) - 2.161
z값을 출력해보자
z 값을 시그모이드 함수에 통과시키면 함수를 얻을 수 있다. 파이썬의 사이파이 라이브러리의 시그모이드 함수인 expit() 를 사용해보자
🎉 선택 미션
과대적합/과소적함 손코딩 코랩 화면 캡쳐하기
실습시간을 늘려봤는데 그만큼 난이도가 올라가서 여전히 부족했다! (살려줘...)
그래도 저번처럼 개념과 실습을 급하게 넘기다가 다시 공부하게 되는 걸 막기위해 기본과제와 4-1장이라도 꼼꼼하게 공부했다.
로지스틱 회귀 다중분류와 4-2정리, 선택미션은 내일 올려겠다...