모델 평가와 성능 향상
5.1 교차 검증(306p)
k겹 교차 검증
폴드1 | 폴드2 | 폴드3 | 폴드4 | 폴드5 | |
분할1 | 테스트 |
훈련 |
|
|
|
분할2 |
|
|
|
|
|
분할3 |
|
|
|
|
|
분할4 |
|
|
|
|
|
분할5 |
|
|
|
|
|
scores = sklearn.model_selection.cross_val_score(LogisticRegression(), iris.data, iris.target cv=5)
5.1.3 계층별 k-겹 교차 검증(그룹간의 비율을 일정하게 유지)
기본값
회귀-> k-겹 교차 검증
분류-> 계층별 k-겹 교차 검증
*분류에 기본 k-겹 교차 검증 이용하기
kfold = sklearn.model_selection.KFold(n_split=5, shuffle=True, random_state=0) // shuffle : 샘플의 순서를 섞기
scores = cross_val_score(LogisticRegression(), iris.data, iris.target, cv=kfold)
LOOCV
폴드 하나에 샘플 하나만 들어 있는 k-겹 교차검증
임의 분할 교차 검증
데이터를 부분 샘플링 한다.
shffle_split = sklearn.model_selection.ShuffleSplit(test_size=0.5, train_size=0.5, n_splits=10) // 실수를 입력하면 비율이 된다.
scores = cross_val_score(LogisticRegression(), iris.data, iris.target, cv=shffle_split)
* ShuffleSplit의 계층별 버전 : StratifiedShuffleSplit
그룹별 교차 검증(폴드의 단위가 그룹이 된다.)
groupKFold = sklearn.model_selection.GroupKFold(n_splits=3)
groups = [0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 3]
scores = cross_val_score(LogisticRegression(), X, y, groups, cv=groupKFold)
==> KFold, StratifiedKFold, GroupKFold 를 가장 널리 사용함
5.2 그리드 서치(316p)
5.2.1 간단한 그리드 서치(직접 구현)
5.2.2 매개변수 과대적합과 검증 세트(직접구현)
데이터 = 훈련 + 검증 + 테스트 세트
데이터 세트를 훈련, 검증으로 나눠서 좋은 매개변수를 찾고, 마지막에 테스트세트로 정확도를 측정한다.(결국 테스트세트의 정확도가 높았던 매개변수를 찾는 것임.)
5.2.3 교차 검증을 사용한 그리드 서치
직접구현
SVC에서 gamma(6단계), C(6단계), 5-겹 교차 검증 : 6*6*5 = 180번의 모델을 생성해야 한다.
그리드서치 GridSearchCV
param_grid = {'C' : [,,,], 'gamma' : [,,,]}
grid_search = GridSearchCV(SCV(), param_grid, cv=5) // 5겹 교차검증
grid_search.fit(X_train, y_train) // X_train데이터를 훈련, 검증 세트로 나누고, 교차검증 및 매개변수를 돌려서 최적의 매개변수 찾음. 또한 최종 모델을 새로 만듬.
grid_search.score(X_test, y_test)
print(grid_search.best_params_)
print(grid_search.best_score_)
print(grid_search.best_estimator_)
비대칭 매개변수 그리드 탐색(조건부...)
예) kernel='linear'이면 C 매개변수만 사용한다.
kernel='rbf' 이면 C와 gamma 모두 사용한다.
param_grid = [
{'kernel' : ['linear'], 'C' : [,,,]}
, {'kernel' : ['rbf'], 'C' : [,,,], 'gamma' : [,,,]}
]
그리드 서치에 다양한 교차 검증 적용
GridSearchCV는 분류에 기본적으로 계층형 k-겹 교차검증을 사용하고
회귀에는 k-겹 교차 검증을 사용한다.
그러나 다른 교차검증 분할기를 사용할 수도 있다(311p)
중첩 교차 검증
데이터 = 훈련 + 테스트
훈련 -> 그리드서치(자체적으로 훈련데이터를 훈련과 검증으로 나눠서 매개변수 찾음)
그런데, 데이터를 훈련 + 테스트로 나누는 과정도 여러번 할 수 있다.
scores = cross_val_score(GridSearchCV(SCV(), param_grid, cv=5), iris.data, iris.target, cv=5) // 대박!!! -> 직접구현(333p)
scores
scores.mean()
CPU 병렬화 : n_jobs 매개변수
scikit-learn에서는 병렬화를 중첩해서 사용할 수 없음
spark-sklearn 이용
5.3 평가 지표와 측정
5.3.1 최종 목표를 기억하라
5.3.2 이진 분류의 평가 지표
에러의 종류: 거짓 양성, 거짓 음성
불균형 데이터셋
오차 행렬
음성 | TN |
FP |
양성 | FN |
TP |
음성으로 예측 | 양성으로 예측 |
정확도 = (TP + TN) / 전체
정밀도 = TP / (TP + FP)
양성으로 예측된 것 중에서 진짜 양성이 얼마인가?
재현율 = TP / (TP + FN)
전체 양성 중에서 진짜 양성이 얼마인가? (진짜 양성 비율TPR, 민감도sensitivity, 적중률hit rate)
f-점수 = 2*정밀도*재현율 / (정밀도 + 재현율)
FPR거짓 양성 비율 = FP / (FP + TN)
전체 음성 중에서 양성으로 예측된 것이 얼마인가?
ROC 곡선 = FPR / TPR(재현율)
AUC = ROC 곡선의 면적
* 불균형한 데이터셋에서는 정확도보다 AUC가 훨씬 좋은 지표이다.
5.3.3 다중 분류의 평가 지표
5.3.4 회귀의 평가 지표
scores = cross_val_score(SVC(), digits.data, digits.target==9, scoring="accuracy")
scores = cross_val_score(SVC(), digits.data, digits.target==9, scoring="roc_auc")
'python 및 머신러닝 > 파이썬 라이브러리를 활용한 머신러닝' 카테고리의 다른 글
scikit-learn 책 정리 (0) | 2017.09.18 |
---|---|
파이썬 라이브러리를 활용한 머신러닝 2장~6장 정리 (1) | 2017.08.30 |
파이썬 라이브러리를 활용한 머신러닝 4장 (0) | 2017.08.25 |
파이썬 라이브러리를 활용한 머신러닝 3장 (0) | 2017.08.18 |
파이썬 라이브러리를 활용한 머신러닝 2장 (0) | 2017.08.09 |