728x90
반응형
book.naver.com/bookdb/book_detail.nhn?bid=16238302
*해당 글은 학습을 목적으로 위의 도서 내용 중 일부 내용만을 요약하여 작성한 포스팅입니다.
상세한 내용 및 전체 내용 확인을 원하신다면 도서 구매를 추천드립니다.
conda install scikit-learn
pip install scikit-learn
import scikit-learn
학습/테스트 데이터 셋 분리
- 데이터 셋을 랜덤하게 학습 셋과 테스트 셋으로 분리해준다.
- sklearn.model_selecction 모듈에 있는 train_test_split을 활용하면 간편하다.
sklearn.model_selection.train_test_split | |
test_size | 전체 데이터에서 테스트 데이터 셋 비중 디폴트는 0.25 |
train_size | 전체 데이터에서 학습 셋 비중 test_size를 주로 사용해서 잘 사용하지 않음 |
shuffle | 데이터 분리 전에 미리 섞을지 결정 디폴트는 True |
random_state | seed값을 줌으로써 동일 seed 입력 시 동일한 학습/테스트용 데이터 셋 생성 |
교차 검증
- 하나의 학습 셋으로 계속 학습시 과적함이 일어날 확률이 있음.
- 교차 검증은 데이터 편중을 막기 위해 별도의 여러 세트로 구성된 학습 데이터 셋과 테스트 데이터 셋으로 학습과 테스트 수행
1) K-폴드 교차검증
- 데이터가 K개로 나누어져, 각 데이터셋이 한 번씩 테스트 셋이 되고, 나머지 데이터셋은 학습 셋이 된다.
- sklearn.model_selection.KFold(n_split=숫자)로 쉽게 구현이 가능하다.
2) Stratified K 폴드
- 불균형한 분포도를 가진 데이터 집합을 위한 K-폴드
- 원본 데이터 집합의 레이블 분포를 학습 및 테스트 셋에 제대로 분배하지 못하는 문제를 해결한다.
- 데이터를 균형있게 나눈다.
- sklearn.model_selection.StrtifiedKFold(n_split=숫자)
*사이킷런은 교차 검증을 쉽게 해줄 수 있는 cross_val_score()을 지원한다.
*폴드 세트 설정부터, 루프를 통한 반복 학습 및 테스트 데이터 인덱스 추출, 반복적인 학습과 예측의 수행과 성능 반환을 전부 처리해준다.
*cross_val_score는 classifier 입력시 Stratified K-Fold를 사용하고, regressor 입력시 K-Fold를 사용한다.
GridSearchCV
- 교차 검증과 최적 하이퍼 파라미터 튜닝을 한 번에 해주는 모듈
- 교차 검증을 기반으로 하이퍼 파라미터의 최적값을 탐색한다.
- 데이터 세트 자동 분할 뒤 순차적 적용으로 하이퍼 파라미터 탐색하는 방식이다.
- 쉽게 하이퍼 파라미터를 찾을 수 있지만, 수행 시간이 오래 걸린다.
sklearn.model_selection.GridSearchCV | |
estimator | classifier, regressot, pipeline |
param_grid | estimator의 튜닝을 위해 파라미터명과 사용될 값 |
scoring | 예측 성능을 측정할 평가 방법 (accuracy) |
cv | 교차 검증을 위해 분할되는 세트 개수 |
refit | True일 경우 입력된 estimator 객체를 찾은 하이퍼 파라미터로 재학습. (default가 True) |
데이터 전처리
- 데이터를 미리 전처리해야 결과가 좋아진다.
1) 결손값 (NaN, Null) 값을 허용하지 않는다.
- 만약 결손값이 얼마 되지 않는다면 평균값으로 대체하나, 대부분이 Null이라면 해당 특징은 삭제한다.
2) 문자열을 입력으로 허용하지 않는다.
- 모든 문자열은 인코딩되어 숫자 형으로 변환되어야 한다.
- 일반적으로 카테고리형 특징과 텍스트형 특징이 여기에 속한다.
데이터 인코딩
1) 레이블 인코딩
- sklearn.preprocessing.LabelEncoder
- transform(아이템들) 사용시 인코딩하여 숫자형 값으로 변환해준다.
- inverse_transform(아이템들) 사용시 디코딩하여 문자형 값으로 변환해준다.
- 레이블 인코딩은 간편하게 문자형 값을 숫자형 카테고리 값으로 변환한다.
- 하지만 레이블 인코딩은 일괄적인 숫자 값으로 변환이 되어 몇몇 알고리즘에서는 예측 성능을 떨어뜨린다.
- 숫자 값의 크고 작음에 특성이 작용하는 알고리즘이 있기 때문이다.
- 그렇기에 레이블 인코딩은 선형 회귀와 같은 ML 알고리즘에는 적용하지 않아야 한다.
- 단, 트리 계열에는 문제가 없다.
2) One-Hot Encoding
- sklearn.preprocessing.OneHotEncoder
- fit(2차원 숫자형 리스트) 으로 인코딩.
- 고유 값에 해당하는 칼럼에만 1을 표시하고 나머지 칼럼에는 0을 표시하는 방식
- 인코딩 전에 라벨 인코더로 숫자 값으로 변환해주고, reshape을 통해 2차원 데이터로 변환해야 한다. (필수)
- 만약 판다스의 get_dummies()를 이용한다면 미리 숫자형으로 변환할 필요가 없다.
특징 스케일링과 정규화-특징 스케일링
- 서로 다른 변수의 값 범위를 일정한 수준으로 맞추는 작업이다.
- 특징 스케일링의 대표적 방법으로 표준화와 정규화가 있다.
- 표준화 : 평균이 0이고 분산이 1인 가우시안 정규 분포로 값을 변화하는 것
- 정규화 : 서로 다른 특징의 크기를 통일하기 위해 크기를 변환하는 것
- StandardScaler-sklearn.preprocessing.StandardScaler-표준화를 쉽게 지원하는 클래스-가우시안 정규 분포를 가질 수 있도록 데이터를 변환한다.-SVM, Linear Regressing, Logistic Regression에서 사용된다.
- MinMaxScaler-sklearn.preprocessing.MinMaxScaler-데이터 값을 0과 1 사이의 범위 값으로 변환한다. 음수 값 존재시 -1에서 1로 변환한다.
*학습 데이터를 스케일링 했을 때의 기준을 테스트 데이터에 적용해야 한다.
*즉, 학습 데이터와 테스트 데이터를 별도로 스케일링 해서는 안된다.
728x90
반응형