캐글(Kaggle)은 훈련데이터와 테스트데이터를 분리하여 제공한다
따라서 훈련데이터의 일부를 검증데이터로 구분하여 모델의 성능을 따로 테스트해야 한다
훈련/검증세트로 모델을 만든 후 최종적으로 테스트세트로 예측 테스트를 한다. 만약 테스트 세트를 여러번 사용하여 모델을 만들면 과적합하여 일반화 성능이 떨어지게 된다
※ 훈련/검증/테스트 세트 차이
훈련데이터는 모델을 Fit하는데 사용
검증데이터는 예측 모델을 선택하기 위해서 예측의 오류를 측정할 때 사용
테스트데이터는 일반화오류를 평가하기 위해 선택된 모델에 한하여 마지막에 딱 한 번 사용
(테스트세트는 훈련이나 검증과정에서 사용하지 않도록 주의해야함)
(테스트데이터가 유출leak되어 훈련/검증과정에 사용이 되면 모델을 잘못 평가하게 됨)
from sklearn.model_selection import train_test_split
train = df_train # 훈련 데이터
test = df_test # 테스트 데이터
# 훈련데이터를 다시 훈련 / 검증 데이터로 분리
train, val = train_test_split(train, random_state=2)
※ 다수 클래스를 기준모델로 정하는 방법(Majority class baseline)
분류에서는 회귀와 다른 평가지표(evaluation metrics)를 사용
Accuracy = =
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) # 정확도
로지스틱회귀는 특성변수를 로지스틱 함수 형태로 표현
결과적으로 관측치가 특정 클래스에 속할 확률값으로 계산한다
분류문제에서는 확률값을 사용하여 분류를 하는데, 예를들어 확률값이 정해진 기준값 보다 크면 1 아니면 0 이라고 예측을 하게 된다
오즈에 로그를 취해 변환하는 것을 로짓변환(Logot transformation)로짓변환을 통해 비선형형태인 로지스틱함수형태를 선형형태로 만들어 회귀계수의 의미를 해석하기 쉽게 한다
오즈는 실패확률에 대한 성공확률의 비
ex) odds = 3이면 성공확률이 실패확률의 3배
,
p = 성공확률, 1-p = 실패확률
p = 1 일때 odds =
p = 0 일때 odds = 0
※ 특성 X의 증가에 따라 로짓(ln(Odds))가 얼마나 증감했다고 해석이 가능하다
odds 확률로 해석을 하려면 exp(계수) = p 를 계산해서 특성 1단위 증가당 확률이 p배 증가한다고 해석
(로지스틱형태의 y값은 0 ~ 1 / 로짓은 - ~ )
from sklearn.linear_model import LogisticRegression
logistic = LogisticRegression()
logistic.fit(X_train, y_train)
logistic.score(X_val, y_val) # 검증세트 분류 정확도