LInear regression
logistic regression
검증세트가 왜 필요할까?
- 훈련세트로 모델을 한 번에 완전하게 학습시키기가 어렵기 때문
- 훈련세트로 다르게 튜닝된 여러 모델들을 학습한 후 어떤 모델이 학습이 잘 되었는지 검증하고 선택하는 과정이 필요
- 최종테스트 결과가 마음에 들지 않는다고 모델을 또 수정하여 테스트 세트를 더 잘 예측하는 모델을 만든다면 그 모델은 테스트세트에 과적합하여 일반화 성능이 떨어질 수 있음
- 훈련데이테어 fit
- 검증데이터는 예측의 오류를 측정할 때 사용
- 하이퍼파라미터(hyperparameter) 튜닝
- 테스트 데이터는 일반화 오류를 평가하기 위해 한번만!! 테스트데이터가 유출(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 = =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)
두개 다 동일한 값 나옴
관측치가 특정 클래스에 속할 확률값으로 계산->분류문제에서는 확률값을 사용하여 분류
- 예)확률값이 정해진 기준값 보다 크면 1 아니면 0 이라고 예측
이미지 출처
로지스틱회귀의 계수는 직관적으로 해석하기가 어려운데 오즈(Odds) 를 사용하면 선형결합 형태로 변환 가능
- 분류문제에서는 클래스 1 확률에 대한 클래스 0 확률의 비라고 해석
,
p = 성공확률, 1-p = 실패확률
p = 1 일때 odds =
p = 0 일때 odds = 0
=> 로짓변환(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)
표준화해주면 성능이 올라감
- 로지스틱 모델
중복값 확인
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 셋에 최적화 시키기