본문 바로가기
코딩/Machine Learning

20. 로지스틱 회귀분석(Logistic Regression)

by 세자책봉 2021. 3. 21.
728x90

Luca Massaron, Alberto Boschetti 저, '파이썬으로 풀어보는 회귀분석', 2019.01.02

내 맘대로 요약 공부 중(문제시 비공개 및 삭제)

저작권에 굉장히 민감한 책이므로 일반적인 내용들만 요약

최초 작성일 2021.3.05

 

1. 분류 문제 정의
  • 연속적인 값(-∞, +∞)을 추정하는 회귀와 달리, 특정 클래스를 예측하는 것
  • 가장 쉽게 이진 분류(Binary Classification), ex. 참/거짓
  • 두 개 이상의 분류 클래스를 갖는 경우 다중 분류(Multiclass Classification)라고 함, ex. 꽃의 종류
2. 분류 모델의 성능 평가
  • 혼동 행렬(Confusion Matrix): 분류가 제대로 되었는지 알 수 있는 가장 간단한 지표
  • sklearn의 metrics, confusion_matrix 활용
  • 히트맵으로 표현 가능

전체 합 = 샘플 수, 각 행의 합 = 원본의 분류 샘플 수, 각 열의 합 = 예측의 분류 샘플 수, 주대각선 합 = 참 분류, 주대각선 제외 합 = 오류 분류
다중 분류의 경우 히트맵이 더 알아보기 쉬움

  • 정확도(Accuracy): 총 샘플 수에서 올바른 분류의 백분율 값
  • sklearn의 metrics, accuracy_score 활용

정확도 = 주대각선의 합 / 전체 합

  • 정밀도(Precision): 해당 Label에 대해 올바른 분류의 백분율 값
  • sklearn의 metrics, precision_score 활용
  • 이진 분류만 지원하기 때문에, 다중 클래스의 경우 각 클래스를 이진 벡터로 만들어야 함

정밀도 = 해당 클래스 올바른 분류 값(혼동행렬에서 아래 값)/ 해당 클래스 열의 합

  • 재현율(Recall): Origin의 특정 클래스 값이 Predict 된 백분율 값
  • sklearn의 metrics, recall_score 활용

재현율 = 해당 클래스의 올바른 분류 개수 / 해당 클래스의 예측 개수

  • 조화 평균(Harmonic Average): 정밀도와 재현율을 종합한 성능 지표 ← 이걸 써라
  • sklearn의 metrics, f1_score 활용

  • sklearn의 metrics, classification_report 활용 ← 이걸 써라

3. 시그모이드 함수를 기반으로하는 이유
  • 이진 분류 문제에서 결과값은 0 또는 1 임 → Test Data와 동일한 데이터를 얻기 위해 선형 회귀로 접근해보자

Y_Test Data
회귀로 만든 X_Test_Data

  • 회귀로 만든 X_Test_Data를 최대한 Y_Test_Data와 동일하게 만들기 위해서는 어떻게 해야 하는가??
  • → 값이 0.5보다 크면 1, 0.5보다 작으면 0 인 조건을 주면 됨
  • → 결과 값을 시그모이드(Sigmoid) 함수에 적용시키게 됨

※ 시그모이드 함수에 대한 자세한 내용은 위키 참조

4. 로지스틱 회귀 함수
  • sklearn의 linear_model, LogisticRegression 활용

분류를 완벽하게 해낸 예제

  • 장점: 쉬움, 간단함, 효율적임, 매우 적은 계수를 가짐, 다중 클래스 분류 확장 가능
  • 단점: 고급 알고리즘에 비해 성능이 안좋음, 선형적임(비선형에 취약함)
5. 다중 클래스 로지스틱 회귀 함수
  • 3개의 더미 클래스 데이터셋을 만들고 → 훈련, 테스트 집합으로 분할 → 다중 클래스 Regressor 훈련 → 시각화

3개의 클래스를 갖는 200개의 데이터를 생성
데이터를 훈련 및 테스트 데이터로 분할하여 Regressor 학습
Regressor 학습 결과 확인(실무에서는 절대 이렇게 나올수가 없다)
분류 영역을 시각화, ravel() 함수에 대한 설명은 아래를 참조한다

  • Ravel() 함수: reshape()의 반대 기능을 하는 함수 참조
 

[Python NumPy] 다차원 배열을 1차원 배열로 평평하게 펴주는 ravel(), flatten() 함수

이번 포스팅에서는 파이썬에서 다차원 배열(array)을 1차원 배열로 평평하게 펴주는 NumPy의 ravel() 함수, flatten() 함수에 대해서 알아보겠습니다. 1차원 배열을 다차원 배열로 재구성/재배열 해주는

rfriend.tistory.com

6. 예제(이진 분류)
  • 10000개의 데이터, 10개의 특성, 이진 분류

① 데이터 생성 및 데이터 점검(Statsmodel을 활용하여 초기에 필요없는 데이터를 거를 수 있음)

데이터 생성 및 Statsmodel을 활용하여 모델 학습
summary()로 크게 필요 없어보이는 특성을 확인할 수 있음

  • coef: 해당 특성의 가중치, std err: 계수의 표준오차, Z: 표준오차와 계수 사이의 비율, 97.5% 신뢰도로 계수의 구간

② 확률 기울기 하강 함수 적용 학습 → 과감하게 PASS

③ Scikit-learn 활용 학습

scikit-learn의 LogisticRegression() 함수 내용은 아래 참고

  • LogisticRegression() 함수 사용 변수 확인은 여기

모델의 계수 확인 위부터 x1 ~ x10

④ SGD(확률적 경사 하강법) Scikit-learn 활용 학습

scikit-learn의 SGDClassifier() 함수 내용은 아래 참고

  • SGDClassifier() 함수 사용 변수 확인은 여기

모델의 계수 확인 위부터 x1 ~ x10

반응형

'코딩 > Machine Learning' 카테고리의 다른 글

22. 데이터 준비(2)  (0) 2021.03.22
21. 데이터 준비(1)  (0) 2021.03.21
19. 다중회귀분석(2)  (0) 2021.03.03
18. 다중회귀분석(1)  (0) 2021.02.26
17. 단순 선형 회귀 분석(2)  (0) 2021.02.23

댓글