본문 바로가기

[ML&DL]

[ML&DL] 트리 알고리즘

1.  결정 트리

결정 트리: 예/아니오에 대한 질문을 이어나가면서 정답을 찾아 학습하는 알고리즘

불순도: 결정 트리가 최적이 질문을 찾기 위한 기준

정보이득: 부모노드와 자식노드의 불순도 차이

가지치기: 결정트리는 제한 없이 성장하면 과대접합되기 쉽기 때문에 가지치기로 성장을 제한

특성 중요도: 결정 트리에 사용된 특성이 불순도를 감소하는데 기여한 정도, 쉽게말해 특성이 트리에서 유용했는지를 판단하는 정도

pandas
  - info()는 데이터 프레임의 요약된 정보를 출력, 인덱스/컬럼타입/메모리/Null개수 등
  - describe()는 데이터프레임의 열의 통계값 제공, 최소/최대/평균/표준편차 등
  
scikit-learn
  - DecisionTreeClassifier: 결정 트리 분류 클래스
    * criterion 매개변수는 불순도를 지정, 기본값=gini
    * splitter 매개변수는 노드를 분할하는 전략을 선택, 기본값=best
    * max_depth은 트리가 성장할 최대 깊이를 지정
    * min_samples_split, max_features 등

  - plot.tree()는 결정 트리 모델을 시각화
    * max_depth은 트리가 성장할 최대 깊이를 지정
    * feature_names 매개변수로 특성의 이름 지정
    * filled 매개면수를 True로 지정하면 노드가 색칠됨

 

2.  교차 검증과 그리드 서치

검증 세트: 하이퍼파라미터 튜닝을 위해 모델을 평가할 때, 테스트 세트를 사용하지 않기 위해 훈련 세트에서 다시 떼어 낸 데이터 세트

교차 검증: 훈련 세트를 여러 폴드로 나눈 다음 한 폴드가 검증 세트의 역할을 하고 나머지 폴드에서는 모델을 훈련, 교차 검증은 이런 식으로 모든 폴드에 대해 검증 점수를 얻어 평균하는 방법

그리드 서치: 하이퍼파라미터 탐색을 자동화해 주는 도구, 탐색할 매개변수를 나열하면 교차 검증을 수행하여 가장 좋은 검증 점수의 매개변수 조합을 선택
 - 이후 선택된 매개변수 조합으로 최종 모델을 훈련

랜덤 서치: 연속된 매개변수 값을 탐색할 때 유용, 탐색할 값을 직접나열하는 것이 아니고 탐색 값을 샘플링할 수 있는 확률 분포 객체를 전달

* scikit-learn
  - cross_validate()교차 검증을 수행하는 함수
    * 첫 번째 매개변수는 모델 객체, 두 번째 세 번째 매개변수는 특성과 타깃 데이터
    * scoring 매개변수에 검증에 사용할 평가지표 지정
    * cv 매개변수에 교차 검증 폴드 수 지정 기본값 =5
      1. 회귀일 때는 KFold 클래스사용
      2. 분류일 때는 StratifiedKFold 클래스 사용
    * n_job 매개변수는 교차 검증을 수행할 때 사용할 cpu코어 수를 지정
    * return_train_score 매개변수를 True로 지정하면 훈련세트의 점수 반환

  - GridSearchCV는 교차 검증으로 하이퍼파라미터 탐색을 수행
    * 최상의 모델을 찾고 훈련 세트 전체를 사용해 최종 모델을 훈련

  - RandomizedSearchCV는 교차 검증으로 랜덤한 하이퍼파라미터 탐색을 수행 

 

3. 트리의 양상블

양상블 학습: 더 좋은 예측 결과를 만들기 위해 여러 개의 모델을 훈련하는 머신러닝 알고리즘

랜덤 포레스트: 대표적인 결정 트리 기반의 양상블 학습 방법, 부트스트랩 샘플을 사용하고 랜덤하게 일부 특성을 선택하여 트리를 만듬

엑스트라 트리: 결정 트리를 사용하여 양상블 모델을 만들지만 부트스트랩 사용을 하지 않고, 랜덤하게 노드를 분할해 과대적합을 감소시킴

그레이디언트 부스팅: 결정 트리를 연속적으로 추가하여 손실 함수를 최소화하는 양상블 방법, 속도는 느리지만 좋은 성능을 기대할 수 있고 속도를 개선한 것이 히스토그램 기반 그레이디언트 부스팅

* scikit-learn
  - RandomForestClassifier 랜덤 포레스트 분류 클래스
    * n_estimators 매개변수는 트리의 개수를 지정
    * criterion 매개변수는 불순도를 지정
    * max_depth는 트리가 성장할 최대 깊이를 지정
    * min_samples_sploit은 노드를 나누기 위한 최소 샘플 개수, 기본값=2
    * max_features 매개변수는 최적의 분할을 위해 탐색할 특성의 개수를 지정
    * bootstrap 매개변수는 부트스트랩 샘플을 사용할지 지정
    * oob_score는 OOB 샘플을 사용하여 훈련한 모델을 평가할지 지정
    * n_job 매개변수는 벙렬 실행에 사용할 cpu 코어 수를 지정

  - ExtraTreesClassifier 엑스트라 트리 분류 클래스
    * bootstrap 매개변수 기본값 = False
    * oob_scoreㄴ 매개변수 기본값 = False
    * n_jobs 매개변수는 cpu 코어수 지정 기본값=1, 모든코어는 -1

  - GradientBoostingClassifier 그레이디언트 부스팅 분류 클래스
    * loss 매개변수는 손실 함수 지정
    * learning_rate 매개변수는 트리가 양상블에 기여하는 정도
    * n_estimators 매개변수는 부스팅 단계를 수행하는 트리의 개수
    * subsample 매개변수는 사용할 훈련 세트의 샘플 비율을 지정
    * max_depth 매개변수는 트리의 최대 깊이

  - HistGradientBoostringClassifier 히스토그램 기반 그레이디언트 부스팅 분류 클래스
    * learning_rate 매개변수는 학습률이라고 함 기본값=0.1
    * max_iter 부스팅 단계를 수행하는 트리의개수
    * max_bins 입력데이터를 나눌 구간의 개수

'[ML&DL]' 카테고리의 다른 글

[ML&DL] 딥러닝 입문  (0) 2023.03.13
[ML&DL] 비지도학습  (0) 2023.03.10
[ML&DL] 다양한 분류 알고리즘  (0) 2023.03.08
[ML&DL] 회귀 알고리즘과 모델 규제  (0) 2023.03.07
[ML&DL] 데이터 다루기  (0) 2023.03.06