DAY24

마친자·2021년 8월 13일
0

Warm-up

LInear regression

logistic regression

Logistic Regression

vaildation Test

검증세트가 왜 필요할까?

  • 훈련세트로 모델을 한 번에 완전하게 학습시키기가 어렵기 때문
  • 훈련세트로 다르게 튜닝된 여러 모델들을 학습한 후 어떤 모델이 학습이 잘 되었는지 검증하고 선택하는 과정이 필요
  • 최종테스트 결과가 마음에 들지 않는다고 모델을 또 수정하여 테스트 세트를 더 잘 예측하는 모델을 만든다면 그 모델은 테스트세트에 과적합하여 일반화 성능이 떨어질 수 있음
  1. 훈련데이테어 fit
  2. 검증데이터는 예측의 오류를 측정할 때 사용
    • 하이퍼파라미터(hyperparameter) 튜닝
  3. 테스트 데이터는 일반화 오류를 평가하기 위해 한번만!! 테스트데이터가 유출(leak) 주의!

데이터가 많으면 전체 데이터를 훈련/검증/테스트 세트로 나누면 되지만, 상대적으로 데이터 수가 적을 경우 K-fold 교차검증(k-fold cross-validation) 을 진행

기준 모델

분류문제 : 타겟 변수에서 가장 빈번하게 나타나는 범주
시계열: 어떤 시점을 기준으로 이전 시간의 데이터

  • 주의: 타겟 변수가 편중된 범주비율을 가지는 경우가 많음
# mode(): Return the highest frequency value in a Series.
major = y_train.mode()[0]
# 타겟 샘플 수 만큼 0이 담긴 리스트를 만듭니다. 기준모델로 예측
y_pred = [major] * len(y_train)

분류에서는 회귀와 다른 평가지표(evaluation metrics)를 사용

  • 절대로 회귀 평가지표를 분류에 사용하시면 안됩니다. ( 반대도 마찬가지)
  • 정확도(Accuracy) 는 분류문제에서 사용하는 평가지표
    Accuracy = 올바르게예측한수전체예측수\frac{올바르게 예측한 수} {전체 예측 수} = TP+TNP+N\frac{TP + TN} {P + N}
from sklearn.metrics import accuracy_score
print("training accuracy: ", accuracy_score(y_train, y_pred))

Baseline 모델의 정확도 점수 (accuracy score)2

donors['made_donation_in_march_2007'].value_counts(normalize=True)

두개 다 동일한 값 나옴

로지스틱 회귀모델

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

로지스틱회귀의 계수는 직관적으로 해석하기가 어려운데 오즈(Odds) 를 사용하면 선형결합 형태로 변환 가능

  • 분류문제에서는 클래스 1 확률에 대한 클래스 0 확률의 비라고 해석

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}
=> 로짓변환(Logit transformation)
:비선형형태인 로지스틱함수형태를 선형형태로 만들어 회귀계수의 의미를 해석하기 쉽게 함-

  • 로짓은 y 값∞ ~ ∞ 범위

사이킥런으로 로지스틱 회귀모델

from sklearn.linear_model import LogisticRegression
logistic = LogisticRegression()
logistic.fit(X_train_imputed, y_train)

정확도 방법1

logistic.score(X_val, y_val))

정확도 방법2

y_pred1= logistic.predict(X_train)
print("training accuracy: ", accuracy_score(y_train, y_pred1))

분류기준이 되는 각 클래스에 속할 확률값을 확인

test_case = [[1, 5, 600]] #예시
logistic.predict_prob(test_case)

0,1로 분류
test_case가 0에 속할 확률, 1에 속할 확률 나옴

로지스틱 회귀모델할 때

  • 원핫인코딩 수행 (DAY 23)
  • 결측치 확인하고 대체- 평균
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(strategy='mean')
X_train_imputed = imputer.fit_transform(X_train_encoded)
X_val_imputed = imputer.transform(X_val_encoded)
  • 특성값들을 표준화
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train_imputed)
X_val_scaled = scaler.transform(X_val_imputed)

표준화해주면 성능이 올라감

  • 로지스틱 모델

N214

데이터 전처리

중복값 확인

df.duplicated(subset=None, keep='first')

중복값 제거

df.drop_duplicates(subset=None, keep='first',inplace=True)

참고

특정 특성만 원핫인코딩

from category_encoders import OneHotEncoder
encoder = OneHotEncoder(cols=['feature'],  use_cat_names = True)
X_train_e = encoder.fit_transform(X_train)
X_test_e = encoder.transform(X_test)
X_val_e = encoder.transform(X_val)

참고

최적화

하이퍼파라미터 조절하기출처

최적화 예시 n214 레퍼런스

더 알아야 할것

vaildation 셋에 최적화 시키기

profile
마루에 미친자

0개의 댓글