Book Title : Introduction to Machine Learning with Python
- 파이썬 라이브러리를 활용한 머신러닝 -
지은이 : 안드레아스 뮐러, 세라 가이도
옮긴이 : 박해선
출판사 : 한빛미디어
코드 출처
https://github.com/rickiepark/introduction_to_ml_with_python
5. 모델 평가와 성능 향상
- 모델이 훈련 세트에 잘 맞는 것보다, 학습 과정에 없던 데이터에 대해 예측을 얼마나 잘하느냐가 중요한데 이 관점에서 평가 방법을 확장 설명
5.1 교차 검증(cross-validation)
- 일반화 성능을 재기 위해 훈련 세트와 테스트 세트로 한 번 나누는 것보다 더 안정적이고 뛰어난 통계적 평가 방법
- 데이터를 여러번 반복해서 나누고 여러 모델 학습
- K-겹 교차검증(k-fold)가 가장 널리 사용
K-fold 교차 검증 과정(5겹)
- 데이터를 폴드(거의 비슷한 크기의 ‘부분 집합’ 5개로 나눔
- 일련의 모델 생성
- 1 번째 모델 : 1 번째 폴드를 테스트 세트로 사용, 2~5번째 폴드를 훈련 세트로 학습
- 2 번쨰 모델 : 2 번째 폴드를 테스트 세트로 사용, 1, 3, 4, 5를 훈련 세트로 학습
- 3,45번째 모델 반복
5.1.1 scikit-learn 교차 검증
1. model_selection 모듈의 cross_val_score사용, cross_validate 함수도 사용 가능
iris = load_iris()
logreg = LogisticRegression(max_iter = 1000)
# 5 겹 교차검증
scores = cross_val_score(logreg, iris.data, iris.target)
print("교차 검증 점수", scores)
print("=" * 100)
scores = cross_val_score(logreg, iris.data, iris.target, cv =10)
print("10겹 교차 검증 점수", scores)
print("=" * 100)
print("cross_validate")
# cross_validate : 훈련과 테스트에 걸린 시간이 포함된 딕셔너리
res = cross_validate(logreg, iris.data, iris.target, return_train_score=True)
display(res)
- 하지만 k개의 폴드로 나누는 것이 항상 좋은 건 아님
- 단순한 k-겹 교차 검증에 문제가 있는 경우, 계층별 k-겹 교차 검증(stratified k-fold cross-validation)을 사용
2.OOCV(Leave-One-Out cross-validation)
- 폴드 하나에 샘플 하나만 들어 있는 k-겹 교차 검증이라고 생각할 수 있음
- 각 반복에서 하나의 데이터 포인트를 선택해 테스트 세트로 사용
from sklearn.model_selection import LeaveOneOut
loo = LeaveOneOut()
scores = cross_val_score(logreg, iris.data, iris.target, cv =loo)
print("교차 검증 분할 횟수:", len(scores))
print("평균 정확도 :", scores.mean())
############
교차 검증 분할 횟수: 150
평균 정확도 : 0.9666666666666667
3. 임의 분할 교차 검증(shuffle-split cross-validation)
- train_size 만큼의 포인트로 훈련 세트를 만듦
- test_size만큼의 포인트로 테스트 세트를 만들도록 분할
- 분할은 n_splits 횟수 만큼 반복
- 반복 횟수를 훈련 세트나 테스트 세트의 크기와 독립적으로 조절해야 할 때 유용
4. 그룹별 교차 검증
- 데이터 안에 매우 연관된 그룹이 있을 떄도 교차검증 사용
'Study > Introduction to ML with python - 한빛' 카테고리의 다른 글
[Book] 6. 알고리즘 체인과 파이프라인 - (1) (0) | 2022.03.02 |
---|---|
[Book] 5. 모델 평가와 성능 향상 - (2) (0) | 2022.03.01 |
[Book] 4. 비지도학습과 데이터 전처리 - (2) (0) | 2022.02.27 |
[Book] 4. 비지도학습과 데이터 전처리 - (1) (0) | 2022.02.25 |
[Book] 3. 비지도학습과 데이터 전처리 - (3) (0) | 2022.02.20 |