본문 바로가기
IT 도서/파이썬 머신러닝

2. Sklearn (사이킷 런) 사용법

by 이민우 2021. 2. 1.
728x90
반응형

book.naver.com/bookdb/book_detail.nhn?bid=16238302

 

파이썬 머신러닝 완벽 가이드

자세한 이론 설명과 파이썬 실습을 통해 머신러닝을 완벽하게 배울 수 있습니다!《파이썬 머신러닝 완벽 가이드》는 이론 위주의 머신러닝 책에서 탈피해 다양한 실전 예제를 직접 구현해 보면

book.naver.com

*해당 글은 학습을 목적으로 위의 도서 내용 중 일부 내용만을 요약하여 작성한 포스팅입니다.

 상세한 내용 및 전체 내용 확인을 원하신다면 도서 구매를 추천드립니다.

 

 

 

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로 변환한다.

 

*학습 데이터를 스케일링 했을 때의 기준을 테스트 데이터에 적용해야 한다.

*즉, 학습 데이터와 테스트 데이터를 별도로 스케일링 해서는 안된다.

 


실습코드 : https://github.com/123okk2/MachineLearning_practice/tree/main/2.%20%EC%82%AC%EC%9D%B4%ED%82%B7%EB%9F%B0%EC%9D%84%20%ED%99%9C%EC%9A%A9%ED%95%9C%20%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D/AI_train_practice_Titanic-main

728x90
반응형

'IT 도서 > 파이썬 머신러닝' 카테고리의 다른 글

7. 군집화  (0) 2021.02.10
6. 차원 축소  (0) 2021.02.09
5. 회귀  (0) 2021.02.08
4. 분류  (0) 2021.02.08
3. 평가  (0) 2021.02.01