Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

데이터분석 공부하기

[파이썬 머신러닝 완벽가이드] 2장. 사이킷런으로 시작하는 머신러닝 본문

머신러닝

[파이썬 머신러닝 완벽가이드] 2장. 사이킷런으로 시작하는 머신러닝

Eileen's 2021. 9. 6. 19:00

1. 사이킷런이란(scikit-learn):

-파이썬 머신러닝 라이브러리 중 가장 많이 사용; 다양한 알고리즘과 개발을 위한 편리한 프래임워크/API제공

 

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

-지도학습

  estimator : 지도학습의 모든 알고리즘을 구현한 클래스를 통칭 (ex. Classifier, Regressor); fit(), predict() 내부 구현

  fit(): 훈련데이터로 기계학습 

  predict(): 예측

-비지도학습 & 피처 추출

  fit(): 입력 데이터의 형태에 맞춰 데이터를 변화한기 위한 사전 구조를 맞추는 작업

  transform() :  실제 작업 진행

  fit_transform() 

 

3. 데이터 전처리(p.118)

   1. 처리할 데이터 :

      1) 결손값(Null, NaN) : 대체, 드롭
      2) 문자열 값:
          1- 카테고리형 (ex- satisfaction rating) -> 코드 값으로 표현

          2- 문자형(ex-ID number, 주민번호) -> 피처 벡터화 or 모델 예측에 불필요시 삭제

   2. 데이터 인코딩:

          1- 레이블 인코딩 : LabelEncoder(); 피처를 코드 형 숫자 값으로 변환

          2- 원핫 인코딩 : OneHotEncoder(); 주의) 1. 변환 전 문자열 값이 숫자형으로 변환되어야 함, 2) 입력 값으로 2차원 데이터 필요

                  * get_dummies(): 위 sklearn과 달리, 판다스에서 지원하는 get_dummies()는 숫자형 값으로 변환 없이 바로 변환!

   3. 피처 스케일링 & 정규화:

          1-정규화(Normalization) : MinMaxScaler; 서로 다른 크기의 피처를 통일; 0~1 범주; 가우시안분포가 아닐 경우 적용

          2-표준화(Standardization): StandardScaler; 평균 0, 분산 1인 가우시안 정규 분포를 가진 값으로 변환;
                                                        가우시안 분포를 가정한 모델(선형회기, 로지스틱회괴, 서포트 벡터 머신)에 적용

            ***ML 모델은 학습데이터 기반으로 학습되기에 테스트 데이터도 학습데이터의 스케일링 기준에 따라야함**

                1. 가능할경우, 전체 데이터의 스케일링 변환 적용 후 학습, 테스트 데이터 분리 (fit_transform(); fit()-> transform())

                2. 1번이 불가능할 경우, 테스트 데이터 변환 시(fit()/ fit_transform())을 적용하지 않고,
                     학습 데이터로 이미 fit()된 scaler객체로 transform()으로 변환

 

4. Model Selection모듈(p.100)

  1. train_test_split(feature dataset, label dataset, test_size, random_state)
         - 튜플로 반환

         - train feature set -> test feature set -> train label set -> test label set 순으로 반환 

   2. 교차검증 분할 & 평가  : 데이터 편중을 막기위해 학습 데이터 세트와 검증데이터 세트로 학습/평가를 수행 (과적합방지)

         - Kfold : .split(feature)을 호출하면 학습용/검증용 데이터로 분할할 수 있는 인덱스반환)
         - StratifiedKfold : 불균형한 분포도를 가진 레이블 데이터 집합을 위한 방식 *) KFold와 달리 .split(feature, label)

              ***) 분류 교차검증은 Stratified K fold가 되어야함, 회귀에서는 Stratified K fold 지원 X
                      (회귀의 결정값은 이산값이아닌 연속된 숫자값 형태의 레이블이므로 결정값별 분포를 정하는 의미가 없음)

         - cross_val_score(estimator, X, y, scoring, cv)

              - 내부에서 estimator를 학습(fit), 예측(predict), 평가(evaluation)시켜줌.

              - classifier가 입력되면 자동으로 Stratified K fold방식 사용(회귀의 경우는 K fold방식)

              - 하나의 평가지표만 반환

         - cross_validation() : 여러 평가지표 반환 가능; 수행 시간도 같이 제공

   3. GridSearchCV(estimator, param_grid, scoring, cv, refit) : 하이퍼 파라미터를 튜닝하여 알고리즘의 예측 성능 개선

         - 하이퍼 파라미터를 순차적으로 입력하면 모든 파라미터 조합을 교차 검증을 기반으로 테스트하고 최적의 파라미터를 도출

         - 순차적으로 파라미터를 테스트하므로 수행시간이 상대적으로 오래걸림

         - param_grid: key & list값을 가진 딕셔너리 형식

         - refit(default = True) : True시, 최적의 하이퍼 파라미터를 찾은 뒤 입력된 estimator 객체를 해당 하이퍼파라미터로 재학습; 
                            최적 성능의 하이퍼 파라미터로 estimator를 학습해 best_estimator_로  저장.
                            이를 X_test에 대해 예측하고 성능평가할 수 있음 *) 이미 학습이 되었음으로 fit()없이 predict()로 예측

         - 결과 : cv_result_속성에 기록되는 결과는 딕셔너리형태로 DataFrame으로 변화시 더 쉽게 볼 수 있음