[머신러닝] Logistic Regression

Colacan·2022년 2월 26일
1

[머신러닝]

목록 보기
5/8

로지스틱회귀를 쓰는 이유

  • 이름은 회귀지만 분류문제를 푸는 지도학습 모델

  • 샘플이 특정한 범주에 속하는지 추정하는데 주로 사용

분류문제

  • 분류문제는 회귀문제와 다른 기준으로 모델을 설정

  • 회귀문제에서는 타겟변수의 평균값이 기준모델

  • 분류문제에서는 타겟변수에서 가장 빈번하게 나타나는 범주를 기준모델, 이렇게 하지 않을 경우 모델의 성능에서 착각할 수 있음
    1) 클래스의 1과 0 비율이 9:1인 학습데이터로 모델을 만들 경우 예측정확도가 90%이다.
    2) 하지만 모델이 무조건 클래스 1만 찍도록 만들면 정확도 90%를 달성할 수 있다.
    3) 따라서 이런 경우에는 클래스 1에 대한 정확도가 90%인 기준모델을 설정하고 더 좋은 성능을 가지는 모델을 만들어야한다.

  • 시계열 데이터는 어떤 시점을 기준으로 이전 시간의 데이터가 기준모델

  • 분류문제를 풀기전에 타겟 범주가 어떤 비율을 가지는지 확인해야한다.

  • value_counts()를 통해서 데이터의 범주의 비율을 확인한다.

  • mode()를 통해 majority한 클래스를 얻는다.

  • 기준모델로 예측하기 위해 타겟 샘플 수 만큼 클래스가 담긴 리스트를 만든다.

  • 분류에서는 회귀와 다른 평가지표를 사용한다. 절대로 회귀평가지표를 분류에서 사용하면 안된다. 정확도는 분류문제에서만 사용하는 평가지표 accuracy_score로 확인 가능하다.

로지스틱회귀

  • 분류문제를 선형회귀모델로 학습하면?
    회귀모델이기 때문에 타겟변수값이 음수에서 양수까지 나타나므로 결과를 분명하게 알 수 없다. 게다가 분류모델에 사용하는 평가지표도 사용불가능하다. 로지스틱의 경우 타겟변수의 범주를 0과 1로하여 예측확률값을 얻을 수 있다.
  • SimpleImputer는 결측치를 평균값으로 채워준다. 사이킷런의 경우 결측치 처리가 불가하므로 Imputer로 사전처리를 해주자.
  • 로지스틱 회귀모델은 지수에 회귀식을 이용하였다. (0과 1사이의 값이 나오게 해줌)
  • 로지스틱회귀는 특성변수를 로지스틱 함수 형태로 표현
  • 로지스틱회귀의 계수는 비선형 함수내에 있어서 직관적으로 해석하기가 어렵다.
  • 오즈(odds)를 사용하면 선형결합 형태로 변환하여 쉽게 해석 가능
    1) 오즈는 실패확률에 대한 성공확률의 비를 의미한다.
    2) 오즈가 4이면 성공확률이 실패확률의 4배)
    3) 따라서, 성공확률이 1이면 오즈는 무한대이고 0이면 오즈는 0이다.
  • 오즈에 자연로그를 취해서 로지스틱회귀를 변환하면 선형결합이 나옴, 이를 로짓변환이라고 한다. 로지스틱형태의 y값은 0~1의 형태지만 로짓은 -무한대~무한대의 범위를 가진다.

데이터를 훈련/검증/테스트로 나누기

  • difference 함수를 통해 트레이닝 데이터와 테스트 데이터의 차이나는 특성 확인 가능

  • 캐글은 훈련데이터와 테스트데이터를 분리하여 제공

  • 이 때 테스트 데이터에서는 타겟정보를 제외해놓았다.

  • 검증을 통해서 성능을 최대화 시킨 후에 단 한번의 테스트만이 가능하도록 설계되어진 것이다.

  • 훈련/검증/테스트로 나누는 것은 모델학습에서 매우 중요

  • 훈련데이터는 모델을 fit하는데 사용

  • 검증데이터는 예측 모델을 선택하기 위해서 예측의 오류를 측정할 때 사용

  • 테스트데이터는 일반화 오류를 평가하기 위해 선택된 모델에 한하여 마지막 한번 사용

  • 따라서 검증데이터보다 테스트데이터의 성능이 떨어진다.

  • 데이터가 충분한 경우에는 훈련/검증/테스트로 나누어야하지만, 데이터가 부족한 경우에는 k-fold와 같은 다른 방법을 이용해야한다.

로지스틱 회귀모델 만들기

  • LogisticRegression을 통해서 만들 수 있다.

  • 선형회귀 모델과 학습과정이 동일하다.

  • score를 통해서 분류 정확도를 리턴할 수 있다.

  • 기준모델보다 정확도가 높을 시 학습이 이루어졌다고 볼 수 있다.

  • predict 를 통해서 어떤 값으로 예측했는지 볼 수 있다.

  • predict_proba를 통해 클래스에 속할 확률값을 확인할 수 있다.

  • coef_로 회귀계수를 볼 수 있다. 값의 방향과 크기는 회귀모델과 같이 이해하면 된다.

  • 카테고리 데이터는 OneHotEncoder, 결측치는 simpleImputer, 특성들의 척도를 맞추기 위해 표준정규분포로 표준화하는 StandardScaler로 처리한다.

  • 사용될 필요가 없는 데이터는 제외한다.

  • 사이킷런의 onehotencoder보다 category_encoder의 것을 이용하도록 하자

  • 원핫인코딩의 use_cat_names = True의 의미 : 각 범주명을 특성에 사용한다.

  • fit_transform
    1) fit과 transform을 동시에 수행
    2) 검증set에서 이를 수행할 시 범주가 부족할 경우 문제가 생길 수 있다.

  • barh그래프로 특성의 계수 시각화 가능

오늘의 참고자료

profile
For DE, DA / There is no royal road to learning

0개의 댓글