사이킷런 Model Selection 모듈
1. 학습데이터와 테스트 데이터 세트 분리(train_test_split())
2. 교차 검증 분할 및 평가
3. 하이퍼 파라미터 튜닝을 위한 다양한 함수와 클래스 제공
>> 더 자세한 코드 github
https://github.com/gggggeun/study/blob/main/1.%20%EC%82%AC%EC%9D%B4%ED%82%B7%EB%9F%B0(Scikit_learn)/3.%20Scikit-learn%20Model%20Selection%20%EB%AA%A8%EB%93%88.ipynb
1. 학습/테스트 데이터 세트 분리 - train_test_split()
<파라미터>
- test_size : 전체 데이터에서 테스트 데이터 세트 크기 결정. defalt=0.25 (25%)
- shuffle : 데이터 분리 전 전체 데이터를 미리 섞는 것. defalt=True
- random_state : 랜덤으로 나뉜 세트들을 호출할 때마다 동일한 세트들로 생성하기 위해 주어진 난수값.
- 반환값(튜플) : 학습용 feature, 테스트용 feature, 학습용 label, 테스트용 label
<주의>
학습을 위한 데이터 양이 적을 땐 적절치 않음. -> split하지 않고, 교차검증 사용하기
2. 교차검증 - cross_val_score()
※ cross_val_score()는 estimator로 분류가 입력되면 Stratified KFold CV 방식으로, 회귀면 KFold 방식으로 분할한다.
1) 교차검증의 종류
1. KFold CV : 가장 보편적인 교차 검증 기법. 회귀분석
: k-1개의 train세트와 1개의 test(or 검증)세트로 k번 검증 평가를 해서 평균으로 최종평가를 냄
- 회귀에서 Stratified KFold는 지원하지 않고, KFold만 사용가능. 회귀의 연속된 숫자값을 결정값별로 분포를 정할 필요 없기 때문.
- 분류에서 사용할 때 문제점 : 레이블 데이터가 불균형일 때 너무 편파적으로 나뉨.
2. Stratified KFold CV : 불균형한 분포도를 가진 레이블에 쓰임. 분류분석
- Stratified Kfold 는 Kfold가 레이블 데이터가 제대로 분배되지 못하는 경우의 문제를 해결해 준다.
- 원본 데이터의 레이블 분포를 먼저 고려한뒤 이 분포와 동일하게 학습과 검증 데이터 세트를 분배하는 방식
- 레이블 분포에 따라 학습/테스트 세트를 나눔
2) 사이킷런에서 교차검증하기
from sklearn.model_selection import cross_val_score
cross_val_score(estimator, X, y=None, scoring=None, cv=None, n_job=1, verbose=0, fit_params=None, pre_dispatch='2*n_jobs')
<파라미터>
- estimator : regressior or classifier
- X : 피처 데이터 세트
- y : 레이블 데이터 세트
- scoring : 예측 성능 평가 지표
- cv : 교차 검증 폴드 수
- 반환 값 : 성능 지표 측정값
3. 교차 검증 + 최적 하이퍼 파라미터 튜닝을 한번에하기- GridSearchCV
데이터 세트를 cross-validation을 위한 학습/테스트 세트로 자동으로 분할한 뒤에 하이퍼 피라미터 그리드에 기술된 모든 파라미터를 순차적으로 적용해 최적의 파라미터를 찾을 수 있게 해준다.
GridSearchCV는 사용자고 튜닝하고자 하는 여러 종류의 하이퍼 파라미터를 다양하게 테스트하면서 최적의 파라미터를 편리하게 찾게 해주지만 동시에 순차적으로 파라미터를 테스트하므로 수행시간이 상대적으로 오래 걸리는 것에 유념해야 한다.
<GridSearchCV 주요 파라미터>
- estimator : classifier, regressor, pipeline 사용가능
- param_grid : key + 리스트 값을 가지는 딕셔너리가 주어진다. estimator의 튜닝을 위해 파라미터명과 사용될 여러 파라미터 값을 지정합니다.
- scoring : 평가 방법. 보통 문자열(ex.'accuracy')로 지정하나 별도의 성능 평가 지표 함수도 지정할 수 있습니다.
- cv : 교차검증을 위해 분할되는 학습/테스트 세트의 개수를 지정
- refit : defalt=True 가장 최적의 하이퍼 파라미터를 찾은 뒤 입력된 estimator 객체를 해당 하이퍼 파라미터로 재학습시킵니다.
<GridSearchCV 속성>
-
.cvresults
- rank_test_score : 성능이 좋은 순위를 나타냄. 이때의 파라미터가 최적의 하이어 파라미터이다.(param)
- mean_test_score : cv의 폴딩 테스트 세트에 대해 총 수행한 평가 평균값
-
.bestparams : 최적의 파라미터
-
.best_score : 최적의 정확도
-
.best_estimator : GridSearchCV의 refit으로 이미 학습된 estimator 반환
'머신러닝 (Machine Learning) > python Scikit-learn library' 카테고리의 다른 글
사이킷런으로 데이터 전처리(결손값,인코딩,스케일) (0) | 2021.02.07 |
---|---|
사이킷런 기반 프레임워크(3) 사이킷런에 내장된 예제 데이터 세트 (0) | 2021.02.07 |
사이킷런 기반 프레임워크(2) 사이킷런의 주요 모듈 (0) | 2021.02.07 |
사이킷런 기반 프레임워크(1) Estimator, fit(), predict() 메서드 (0) | 2021.02.07 |
사이킷런 특징과 설치법 (0) | 2021.02.07 |