CH 2. 첫번째 ML 만들어보기

권경민·2023년 1월 2일
0

1. 붓꽃 품종 예측하기

붓꽃 데이터 생성 : load_iris()
머신러닝 알고리즘 : Decision Tree
학습,테스트 데이터 분리 : train_test_split()

  • train_test_split()의 구조 : (피처 데이터 세트, 레이블 데이터 세트, 테스트 세트의 비율, 난수 발생 값)
    random_state의 역할 : 수행할 때마다 동일한 데이터 세트로 분리 가능

  • accuracy_score의 구조 : (실제 레이블 데이터 세트, 예측 레이블 데이터 세트)
    accuracy_score : 실제 테스트 데이터 세트와 예측결과가 얼마나 일치하는지 확인

분류 예측 프로세스 정리¶

  1. 데이터 세트 분리 : 데이터를 학습데이터와 테스트 데이터로 분리
  2. 모델 학습 : 학습 데이터를 기반으로 머신러닝 알고리즘을 적용해 모델을 학습시킴
  3. 예측 수행 : 학습된 머신러닝 모델을 이용해 테스트 데이터의 분류를 예측
  4. 평가 : 정확도 평가

2. 사이킷런의 기반 프레임워크 익히기

Estimator : 지도학습의 모든 알고리즘을 구현한 클래스, '모델'
Estimator 클래스는 fit(), predict()을 내부에서 구현함

load_iris() API의 반환 결과 : sklearn.utils.Bunch 클래스

  • Bunch 클래스는 Python 딕셔너리 자료형과 유사

3. Model Selection 모듈 소개

Model Selection 모듈

학습/테스트 데이터 세트 분리
교차 검증 분할 및 평가
Estimator의 하이퍼 파라미터 튜닝을 위한 다양한 함수 & 클래스 제공

KFold와 StratifiedKFold의 차이점 : StratifiedKFold는 정답데이터 분포도에 따라 학습/검증 데이터를 나누기 때문에 split() 함수에 인자로 피처와 정답 데이터세트가 모두 필요함.
KFold의 경우에는 정답 데이터 세트는 split() 함수의 인자로 입력하지 않아도 상관 x.

교차 검증을 간편하게 - cross_val_score()

cross_val_score()의 구조 :
cross_val_score(estimator, X, y=None, scoring=None, cv=None, n_jobs=1, verbose=0, fit_params=None, pre_dispatch='2*n_jobs')
이 중 estimator, X, y, scoring, cv가 주요 파라메터

  • estimator : 모델이 뭔지, 분류 알고리즘인지 회귀 알고리즘인지
  • X : 피처 데이터 세트
  • y : 레이블 데이터 세트
  • scoring : 예측 성능 평가 지표
  • cv : 교차 검증 폴드 수

분류가 입력되면 Stratified K 폴드 방식으로 레이블값 분포에 따라 학습/테스트 세트 분할함.
회귀가 입력되면 Stratified 방식으로 분할 못하니까 KFold 방식으로 분할됨.

GridSearchCV - 교차 검증과 최적 하이퍼 파라미터 튜닝을 한번에

GridSearchCV의 파라미터

  • estimator : classifier, regressor, pipeline 사용가능
  • param_grid : key+ 리스트 값을 가지는 딕셔너리가 주어짐. estimator의 튜닝을 위해 파라미터명과 사용될 여러 파라미터 값을 지정.
  • scoring : 예측 성능을 측정할 평가 방법 지정. 보통은 사이킷런의 성능 평가 지표를 지정하는 문자열(ex. 정확도의 경우 'accuracy')로 지정하지만 별도의 성능 평가 지표 함수도 지정 가능.
  • cv : 교차 검증을 위해 분할되는 학습/테스트 세트의 개수를 지정함
  • refit : 디폴트는 True이며, True로 생성할 때 가장 최적의 하이퍼 파라미터를 찾은 뒤 입력된 estimator 객체를 해당 하이퍼 파라미터로 재학습시킴

GridSearchCV의 주요 칼럼 설명

  • params : 수행할때마다 적용된 개별 하이퍼 파라미터 값을 나타냄.
  • rank_test_score : 하이퍼 파라미터별로 성능이 좋은 순위를 나타냄. 1이 가장 좋고 1일때가 최적의 하이퍼 파라미터임.
  • mean_test_score : 개별 하이퍼 파라미터별로 cv의 폴딩 테스트 세트에 대해 총 수행한 평가 평균값임.

4. 데이터 전처리

레이블 인코딩 - LabelEncoder

레이블 인코딩은 선형회귀같은 ML알고리즘에는 적용하지 않아야 함. 그렇다면?
트리 계열의 ML알고리즘에 적용해야함.
원-핫 인코딩은 이런 레이블 인코딩의 문제점을 해결하기 위해 나옴

원-핫 인코딩

피처 스케일링과 정규화

표준화, 정규화 - 피처 스케일링
선형 대수 개념의 정규화 - 벡터 정규화

StandardScaler - 표준화를 쉽게 지원하기 위한 클래스

MinmaxScaler - 데이터값을 0과 1 사이의 범위값으로 변환

학습 데이터와 테스트 데이터의 스케일링 변환 시 유의점

학습 데이터 세트와 테스트 데이터 세트에 fit() 과 transform()을 적용할 때 주의가 필요.

  • Scaler 객체를 이용해 학습 데이터 세트로 fit()과 transform()을 적용하면 테스트 데이터 세트로는 다시 fit()을 수행하지 않고 학습 데이터 세트로 fit()을 수행한 결과를 이용해 transform()변환을 적용해야 함.
  • 즉, 학습 데이터로 fit()이 적용된 스케일링 기준 정보를 그대로 테스트 데이터에도 적용.
    ->두 데이터에 모두 적용하면 학습기준이 달라지기 때문.

학습 데이터와 테스트 데이터의 fit(), transform(), fit_transform()을 이용해 스케일링 변환 시 유의할 점 요약

  1. 가능하다면 전체 데이터의 스케일링 변환을 적용한 후 학습/테스트 데이터로 분리
  2. 1이 여의치 않으면 테스트 데이터 변환 시에는 fit()이나 fit_transform()을 적용하지 않고 학습 데이터로 이미 fit()된 Scaler 객체를 이용해서 transform()으로 변환
profile
2023년은 나의 해

0개의 댓글