Logistic Regression

이승수·2021년 8월 15일
0

훈련 / 검증 / 테스트 세트

캐글(Kaggle)은 훈련데이터와 테스트데이터를 분리하여 제공한다
따라서 훈련데이터의 일부를 검증데이터로 구분하여 모델의 성능을 따로 테스트해야 한다
훈련/검증세트로 모델을 만든 후 최종적으로 테스트세트로 예측 테스트를 한다. 만약 테스트 세트를 여러번 사용하여 모델을 만들면 과적합하여 일반화 성능이 떨어지게 된다

※ 훈련/검증/테스트 세트 차이

  1. 훈련데이터는 모델을 Fit하는데 사용

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

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

(테스트세트는 훈련이나 검증과정에서 사용하지 않도록 주의해야함)
(테스트데이터가 유출leak되어 훈련/검증과정에 사용이 되면 모델을 잘못 평가하게 됨)

  • 학습모델을 개발할 때 모델선택(Model Selection)을 수행해야한다.
    이때 하이퍼파라미터(hyperparameter) 튜닝을 하게 되는데 튜닝의 효과를 확인하기 위해서 검증세트가 필요하다.
  • ⚠️테스트 세트로 하이퍼파라미터 튜닝을 하면 절대로 안된다
  • 데이터가 많을 경우 훈련/검증/테스트 세트로 나누고 상대적으로 데이터수가 적은 경우 K-fold 교차검증(k-fold cross-validation)을 진행할 수 있다. 이때도 테스트 세트는 미리 떼어 놓아야한다
from sklearn.model_selection import train_test_split

train = df_train    # 훈련 데이터
test = df_test      # 테스트 데이터

# 훈련데이터를 다시 훈련 / 검증 데이터로 분리
train, val = train_test_split(train, random_state=2) 

분류(Classification)

※ 다수 클래스를 기준모델로 정하는 방법(Majority class baseline)

  • 회귀문제 : 타겟 변수의 평균값
  • 분류문제 : 타겟 변수에서 가장 빈번하게 나타나는 범주
  • 시계열 데이터 : 어떤 시점을 기준으로 이전 시간의 데이터
    (분류 문제를 풀기 전엔 항상 먼저 타겟 범주가 어떤 비율을 가지고 있는지 확인)

분류에서는 회귀와 다른 평가지표(evaluation metrics)를 사용
Accuracy = 올바르게예측한수전체예측수\frac{올바르게 예측한 수} {전체 예측 수} = TP+TNP+N\frac{TP + TN} {P + N}

from sklearn.metrics import accuracy_score

y_train = train[target]          # 훈련데이터의 타겟값들
major = y_train.mode()[0]        # 가장 많이 나온 값
y_pred = [major] * len(y_train)  # 기준모델로 예측

accuracy_score(y_train, y_pred)  # 정확도

로지스틱 회귀모델

P(X)=11+e(β0+β1X1++βpXp)\large P(X)={\frac {1}{1+e^{-(\beta _{0}+\beta _{1}X_{1}+\cdots +\beta _{p}X_{p})}}}
0P(X)10 \leq P(X) \leq 1
로지스틱회귀는 특성변수를 로지스틱 함수 형태로 표현

결과적으로 관측치가 특정 클래스에 속할 확률값으로 계산한다
분류문제에서는 확률값을 사용하여 분류를 하는데, 예를들어 확률값이 정해진 기준값 보다 크면 1 아니면 0 이라고 예측을 하게 된다

로짓변환(Logit transformation)

오즈에 로그를 취해 변환하는 것을 로짓변환(Logot transformation)로짓변환을 통해 비선형형태인 로지스틱함수형태를 선형형태로 만들어 회귀계수의 의미를 해석하기 쉽게 한다
오즈는 실패확률에 대한 성공확률의 비
ex) odds = 3이면 성공확률이 실패확률의 3배

Odds=p1pOdds = \large \frac{p}{1-p},

p = 성공확률, 1-p = 실패확률

p = 1 일때 odds = \infty

p = 0 일때 odds = 0

ln(Odds)=ln(p1p)=ln(11+e(β0+β1X1++βpXp)111+e(β0+β1X1++βpXp))=β0+β1X1++βpXp\large ln(Odds) = ln(\frac{p}{1-p}) = ln(\frac{\frac {1}{1+e^{-(\beta _{0}+\beta _{1}X_{1}+\cdots +\beta _{p}X_{p})}}}{1 - \frac {1}{1+e^{-(\beta _{0}+\beta _{1}X_{1}+\cdots +\beta _{p}X_{p})}}}) = \normalsize \beta _{0}+\beta _{1}X_{1}+\cdots +\beta _{p}X_{p}

※ 특성 X의 증가에 따라 로짓(ln(Odds))가 얼마나 증감했다고 해석이 가능하다
odds 확률로 해석을 하려면 exp(계수) = p 를 계산해서 특성 1단위 증가당 확률이 p배 증가한다고 해석
(로지스틱형태의 y값은 0 ~ 1 / 로짓은 -\infty ~ \infty)

from sklearn.linear_model import LogisticRegression

logistic = LogisticRegression()
logistic.fit(X_train, y_train)

logistic.score(X_val, y_val)    # 검증세트 분류 정확도
profile
AI/Data Science

0개의 댓글

관련 채용 정보