2장 사이킷런으로 시작하는 머신러닝

1 사이킷런 소개와 특징

  • 파이썬 머신러닝 라이브러리 중 가장 많이 사용되는 라이브러리
  • 파이토치(커스터마이즈 쉬움. 최신 모델에 많이 사용), 텐서플로우(커스터마이즈 복잡) 등 딥러닝 전문 라이브러리가 강세지만 데이터분석가가 의존하는 대표적인 ML 라이브러리
  • -> 통계 기반이라서 설명이 가능하기 때문
  • 딥러닝은 머신러닝 기법 중 하나
  • 머신러닝 : 통계 기반의 알고리즘을 이용한 기계학습방법
  • 딥러닝 : 신경망
  • 사이킷런의 특징
    1. 파이썬 기반의 다른 머신러닝 패키지도 사이킷런 스타일의 api를 지향할 정도로 쉬운 api 제공
    2. 머신러닝을 위한 다양한 알고리즘과 개발을 위한 편리한 프레임워크와 api 제공
    3. 오랜 기간 실전 환경에서 검증되었고, 많은 환경에서 사용되는 성숙한 라이브러리

2 첫 번째 머신러닝 만들어보기 - 붓꽃 품종 예측

  • 붓꽃 데이터셋으로 붓꽃의 품종을 분류
  • 꽃잎의 길이, 너비, 꽃밭침의 길이, 너비 총 4개의 feature
  • 레이블은 3개. Setosa, Verlcolor, Virginica
  • Task : 꽃 품종 3개 예측 -> 다중 분류
 
  • 분류 : 대표적인 지도학습 방법의 하나
  • 지도학습은 학습을 위한 다양한 피쳐와 분류 결정값인 레이블 데이터로 모델을 학습
  • 별도의 테스트 데이터셋에서 미지의 레이블을 예측
  • 학습 데이터셋 : 학습을 위해 주어진 데이터셋
  • 테스트 데이터셋 : 머신러닝 모델의 예측 성능을 평가하기 위해 주어진 별도의 데이터셋. 학습에 아예 넣지 않은 데이터

머신러닝 기본 프로세스
0. 데이터 준비 -> 가장 많은 시간, 고민
1. 데이터셋 분리: 데이터를 학습 데이터와 테스트 데이터로 분리
2. 모델 학습 : 학습 데이터를 기반으로 머신러닝 알고리즘을 적용해 모델 학습
3. 예측 수행 : 학습된 모델을 이용, 테스트 데이터 분류 예측
4. 평가 : 예측된 결과와 테스트데이터의 실제 결과를 비교해 모델 성능 평가

 

3 사이킷런 기반 프레임워크 익히기

Estimator 이해 및 fit(), predict() 메서드

  • Estimator
  • 지도학습: 분류(Classification), 회귀(Regression) Classifier과 Regressor를 합친 것.
  • fit(), predict()을 내부에서 구현=> 학습, 예측 결과 반환
  • evaluation 함수, 하이퍼 파라미터 튜닝을 지원하는 클래스의 경우 estimator를 인자로 받음
  • Classifier(분류)
    • 분류 구현 클래스
    • DecisionTreeClassifier
    • RandomForestClassifier
    • GradientBosstingClassifier
    • GaussianNB
    • SVC
  • Regression(회귀)
    • 회귀 구현 클래스
    • LinearRegression
    • Ridge
    • RandomForsetRegressor
    • GradientBoostingRegressor
  • 비지도학습인 차원축소, 클러스터링, 피처 추출 등을 구현한 클래스 역시 대부분 fit(), transform()을 적용
  • fit()은 학습이 아닌 입력 데이터의 형태에 맞춰 데이터를 변환하기 위해 사전구조를 맞춤
  • transform()은 입력 데이터의 차원 변환, 클러스터링, 피처 추출 등의 실제 작업에 사용
  • fit() + transform() = fit_transform()

교차 검증

  • ML 알고리즘으로 학습시킨 뒤 성능 평가를 위해 별도의 테스트 데이터를 사용함
  • -> 과적합(Overfitting <-> 과소적합)이 발생할 수 있음
  • ML은 신뢰성 높은 데이터셋이 많을 수록 성능이 통상적으로 좋음
  • 데이터셋이 적을 경우 모델에 최대한 많은 데이터를 보여주기 위해 사용

K 폴드 교차 검증

  • 가장 보편적으로 사용되는 교차 검증 방법
  • K개의 데이터 폴드 세트를 만들어 K번만큼 각 폴트에 학습과 검증 평가를 반복적으로 수행
  • 각각 학습/검증을 독립적으로 진행하는 프로세스

StratifiedKFold

  • 계층화된 K-Fold 교차 검증기
  • 학습/테스트 세트의 데이터를 분할하기 위한 학습/테스트 인덱스를 제공
  • 이 교차 검증 개체는 계층화된 폴드를 반환하는 KFold의 변형으로, 폴드는 각 클래스의 샘플 비율을 보존하여 만들어짐

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

  • cross_val_score()는 폴드 세트를 설정하고 반복문 for 루프에서 반복으로 학습 및 테스트 데이터의 인덱스를 추출, 반복적으로 학습과 예측을 수행하는 과정을 한 번에 수행해주는 API
  • scoring 매개변수를 통하여 평가 지표를 지정
  • 다중 평가 지표 사용하고 싶을 경우 -> 리스트로 작성하여 전달
  • 교차 검증을 사용하는 가장 간단한 방법은 cross_val_score 추정기와 데이터 세트에서 도우미 함수를 호출하는 것

GridSearchCV

  • 교차검증과 최적 하이퍼 파라미터 튜닝을 한 번에
  • 하이퍼 파라미터 : 머신러닝 알고리즘을 구성하는 주요 구성 요소. 값을 조정해 알고리즘의 예측 성능 개선 가능
  • 주요 파라미터
    • estimator: classifier, regressor, pipeline 사용 가능
    • param_grid : key+리스트값을 가지는 딕셔너리. estimator 튜닝을 위해 파라미터명과 사용될 여러 파라미터 값을 지정
    • scoring : 테스트 세트에서 교차 검증된 모델의 성능을 평가
    • cv : int. 교차 검증 생성기 또는 반복 가능. default=None(기본 5겹 교차 검증)
    • refit : dafault는 refit=True. 가장 좋은 파라미터 설정(가장 잘 발견된 매개변수를 사용)으로 재학습 시킴

5 데이터 전처리

  • ML 알고리즘은 데이터에 기반하고 있기 때문에 어떤 데이터를 입력으로 가지냐에 따라 결과가 크게 달라질 수 있음
  • ML 알고리즘에 학습데이터를 입력으로 사용하기 위해서는 NaN, Null 값은 허용 X-> 다른 값으로 처리해야됨
  • ML 알고리즘 학습데이터에 문자열 허용 X-> 숫자값으로 변환 필요

데이터 인코딩

  • 머신러닝을 위한 대표적인 인코딩 방식 2가지
    • 레이블 인코딩 : 카테고리 피처를 코드형 숫자값으로 변환
    • 원-핫 인코딩 : 피처 값의 유형에 따라 새로운 피처를 추가해 고유값에 해당하는 컬럼에 1, 나머지에는 0을 표시
 

레이블 인코딩

  • 사이킷런의 레이블 인코딩은 LabelEncoder() 클래스로 구현
  • LabelEncoder()로 객체 생성 후 fit(), trandform()을 호출해 레이블 인코딩 수행

원-핫 인코딩(One-Hot Encoding)

  • OneHotEncoder 클래스로 변환
  • fit(), transform() 을 같이 사용
  • OneHotEncoder로 변환 전 모든 문자열 값이 숫자형 값으로 변환되어야 함
  • pandas의 get_dummies를 사용하면 문자열에서 바로 원핫인코딩 가능
  • LabelEncoder로 바꿔줄 수 있음
  • 입력값으로 2차원 데이터 필요
  • pandas에서 지원하는 get_dummies() 함수
  • pandas.get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None, sparse=False, drop_first=False, dtype=None)

피처 스케일링과 정규화

  • 서로 다른 변수의 값 범위를 일정한 수준으로 맞추는 작업 = 피처 스케일링(Feature Scaling)
  • 표준화(Standardization) : 데이터의 피처 평균이 0이고 분산이 1인 가우시안 정규 분포를 가진 값으로 반환하는 것
    • 최대한 비슷하게 만들어주지만 똑 떨어지게 만들어주진 않음
  • 정규화(Formalization) : 서로 다른 피처의 크기를 통일하기 위해 변환
  • 데이터 특성들에 범주형이 많으면 정규화
  • 특성들에 연속된 숫자 데이터가 많은데 범주를 따르지 않으면 표준화를 해준다
  • 특성이 연속된 숫자 데이터면 무조건 표준화or정규화로 스케일링
  • 특성이 범주형/문자열 데이터면 무조건 원-핫인코딩

StandaraScaler

  • 서포터벡터머신, 회귀알고리즘은 데이터가 가우시안 분포를 갖고 있다 가정하고 구현되었기 때문에 사전에 표준화를 진행함

MinMaxScaler

  • 정규화
  • 데이터가 가우시안 분포가 아닐 경우 적용
  • 최소값=0, 최대값=1

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

  • 학습데이터와 테스트 데이터는 동일한 방법으로 스케일링 되어야 함
  • 스케일링 시 학습데이터의 분모의 값이 다른 경우 스케일링의 결과가 달라짐
    • MinMaxScaler = (x - x의 최소값) / (x의 최대값 - x의 최소값)
  • 스플릿 전 전체 데이터에서 X_max, X_min을 찾고 스케일링하는 것이 가장 좋음
  • 불가능할 경우