[혼자 공부하는 머신러닝 + 딥러닝] 9강_로지스틱 회귀 알고리즘을 배우고 이진 분류 문제에서 클래스 확률 예측하기

9강_로지스틱 회귀 알고리즘을 배우고 이진 분류 문제에서 클래스 확률 예측하기


럭키백의 확률

  • "k-최근접 이웃은 주변 이웃을 찾아주니까 이웃의 클래스 비율을 확률이라고 출력하면 되지 않을까?"


데이터 준비

  • read_csv()
    • 데이터 읽어들임
  • head()
    • 처음 5개 행 출력
  • unique()
    • 열의 값 추출
  • to_numpy()
    • 넘파이 배열로 바꿈
  • 데이터 세트 2개 (훈련, 테스트)
  • 표준화 전처리
    • 훈련 세트의 통계 값으로 테스트 세트를 변환해야 함.


k-최근접 이웃 분류기의 확률 예측

  • 다중분류
    • 타깃 데이터에 2개 이상의 클래스가 포함된 문제
  • 사이킷런에서는 문자열로 된 타깃값을 숫자로 바꾸지 않고 그대로 사용할 수 있음. (순서는 알파벳 순)
  • predict()
    • 타깃값으로 예측을 출력
  • predict_proba() 
    • 클래스별 확률값 반환
  • round() 
    • 소수점 첫째 자리에서 반올림 (decimals 매개변수로 아래 자릿수 지정 가능)
  • kneighbors()
    • 2차원 배열이어야 함


로지스틱 회귀

  • 로지스틱 회귀는 이름은 회귀이지만 분류 모델.(선형회귀와 동일하게 선형 방정식을 학습)
  • z 는 어떤값도 가능하지만 확률이 되기 위해 0~1사이값이 되어야 함. (시그모이드 함수, 로지스틱 함수 사용)



로지스틱 회귀로 이진 분류 수행하기

  • 불리언 인덱싱
    • True, False 값을 전달하여 행을 선택할 수 있는것 (넘파이 배열)
    • 비교 연산자를 사용하면 모두 True로 만들 수 있음
  • predict_proba()
    • 예측 확률 제공 (음성 클래스와 양성 클래스에 대한 확률 출력)
  • decisioin_function() 
    • z 값 출력 (양성 클래스)
  • expit() - scipy 라이브러리
    • z 값을 시그모이드 함수에 통과시키면 확률을 얻을 수 있음
  • coef_ / intercept
    • 로지스틱 모델이 학습한 선형 방정식의 계수

로지스틱 회귀로 다중 분류 수행하기

  • 다중분류는 클래스마다 z 값을 하나씩 계산함.
  • 가장 높은 z 값을 출력하는 클래스가 예측 클래스가 됨. 
  • 다중분류는 소프트맥스 함수를 사용하여 7개의 z값을 확률로 변환함. 
    • 소프트맥스 함수
      • 여러 개의 선형 방정식의 출력값을 0~1 사이로 압축하고 전체 합이 1이 되도록 만듬. 
      • 이를 위해 지수 함수를 사용하기 때문에 정규화된 지수 함수라고도 부름
  • decision_function() 
    • z1~z7 까지의 값을 구한 다음 소프트맥스 함수를 사용해 확률로 바꿈.
  • softmax() - scipy.special
    • axis 매개변수 : 소프트맥스를 계산할 축을 지정함. 

- 시그모이드 함수와 소프트 맥스 함수가 중요한가? 신경망 배울때 등장, 그때 더 잘 이해할수있음. 

로지스틱 회귀로 확률 예측

  • 분류 모델은 예측뿐만 아니라 예측의 근거가 되는 확률을 출력할 수 있음. 
  • k-최근접 이웃 모델은 이웃한 샘플의 클래스 비율이므로 항상 정해진 확률만 출력함. 
  • 로지스틱 회귀는 회귀 모델이 아닌 분류 모델이며, 선형 회귀처럼 선형 방정식을 사용함.
    • 계산한 값을 0~1 사이로 압축 (0~100% 확률)
    • 하나의 선형 방정식을 훈련함
    • 시그모이드 함수에 통과시켜 양성 클래스에 대한 확률을 구함
    • 음성클래스의 확률은 (1 - 양성 클래스의 확률)
  • 다중 분류일 경우에는 클래스 개수만큼 방정식 훈련
    • 출력값을 소프트맥스 함수를 통과시켜 전체 클래스에 대한 합이 항상 1이 되도록 만듬. 


키워드로 끝내는 핵심 포인트

  • 로지스틱 회귀
    • 선형 방정식을 사용한 분류 알고리즘
    • 선형 회귀와 달리 시그모이드 함수나 소프트맥스 함수를 사용하여 클래스 확률을 출력할 수 있음. 
  • 다중 분류
    • 타깃 클래스가 2개 이상인 분류 문제
    • 로지스틱 회귀는 다중 분류를 위해 소프트맥스 함수를 사용하여 클래스를 예측함. 
  • 시그모이드 함수
    • 선형 방정식의 출력을 0과 1 사이의 값으로 압축하며 이진 분류를 위해 사용함. 
  • 소프트맥스 함수
    • 다중 분류에서 여러 선형 방정식의 출력 결과를 정규화하여 합이 1이 되도록 만듬. 


핵심 패키지와 함수

  • scikit-learn
    • LogisticRegression 
      • 선형 분류 알고리즘인 로지스틱 회귀를 위한 클래스
    • predict_proba()
      • 메서드는 예측 확률을 반환함. 
      • 이진 분류의 경우: 샘플마다 음성 클래스와 양성 클래스에 대한 확률을 반환함
      • 다중 분류의 경우: 샘플마다 모든 클래스에 대한 확률 반환
    • decision_function()
      • 모델이 학습한 선형 방정식의 출력을 반환
      • 이진 분류의 경우: 양성 클래스의 확률이 반환, 이 값이 0보다 크면 양성 클래스, 작거나 같으면 음성 클래스로 예측
      • 다중 분류의 경우: 각 클래스마다 선형 방정식을 계산, 가장 큰 값의 클래스가 예측 클래스가 됨. 

확인 문제

  • 2개보다 많은 클래스가 있는 분류 문제
  • 로지스틱 회귀가 이진 분류에서 확률을 출력하기 위해 사용하는 함수 
  • decision_function() 메서드의 출력이 0일때 시그모이드 함수의 값 

댓글

이 블로그의 인기 게시물

[혼자 공부하는 머신러닝 + 딥러닝] 17강_인공 신경망: 간단한 인공 신경망 모델 만들기

[솔트룩스] 새싹 인공지능 응용 SW 개발자 양성과정 | 24일차 | 5. 머신러닝 (2)

[혼자 공부하는 머신러닝 + 딥러닝] 10강_확률적 경사 하강법 알아보기