목표
5회차: 8/3 14:00 ~ 17:00
계획: 딥러닝 교재 Chapter5 학습, (시간이 남을 시 파이썬 복습)
결과
5-1. 결정 트리
개념정리
결정 트리
- '예/아니오'에 대한 질문을 이어나가면서 정답을 찾아 학습하는 알고리즘
- 비교적 예측 과정을 이해하기 쉽고 성능도 뛰어남
불순도
- 결정 트리가 최적의 질문을 찾기 위한 기준
- 사이킷런에는 지니 불순도와 엔트로피 불순도가 있음
정보 이득
- 부모 노드와 자식 노드의 불순도 차이
- 결정 트리 알고리즘은 정보 이득이 최대화되도록 학습
가지치기
- 결정 트리가 제한 없이 성장해 훈련 세트에 과대적합되는 것을 막기 위해 결정 트리의 성장을 제한하는 방법
특성 중요도
- 결정 트리에 사용된 특성이 불순도를 감소하는데 기여한 정도를 나타내는 값
패키지 및 함수
pandas 패키지
info()
- 데이터프레임의 요약된 정보를 출력
- 인덱스와 컬러 타입을 출력하고 null이 아닌 값의 개수, 메모리 사용량을 제공
- verbose 매개변수의 기본값 True를 False로 바꾸면 각 열에 대한 정보를 출력하지 않음
describe()
- 데이터프레임 열의 통계 값을 제공
- 수치형일 경우 최소, 최대, 평균, 표준편차와 사분위값 등이 출력됨
- 문자열 같은 객체 타입의 열은 가장 자주 등장하는 값과 횟수 등이 출력됨
- percentiles 매개변수에서 백분위수를 지정, 기본값은 [0.25, 0.5, 0.75]
scikit-learn 패키지
DecisionTreeClassifier
- 결정 트리 분류 클래스
- criterion: 불순도를 지정, 기본값은 'gini'(지니 불순도), 'entropy'(엔트로피 불순도) 사용 가능
- splitter: 노드를 분할하는 전략을 선택, 기본값은 'best'로 정보 이득이 최대가 되도록 분할, 'random'이면 임의로 노드를 분할
- max_depth: 트리가 성장할 최대 깊이를 지정, 기본값은 None으로 리프 노드가 순수하거나 min_samples_split보다 샘플 개수가 적을 때까지 성장
- min_samples_split: 노드를 나누기 위한 최소 샘플 개수, 기본값은 2
- max_features: 최적의 분할을 위해 탐색할 특성의 개수를 지정, 기본값은 None으로 모든 특성을 사용
plot_tree()
- 결정 트리 모델을 시각화, 첫 매개변수로 결정 트리 모델 객체를 전달
- max_depth: 나타낼 트리의 깊이를 지정, 기본값은 None으로 모든 노드를 출력
- feature_names: 특성의 이름을 지정
- filled: True로 지정하면 타깃값에 따라 노드 안에 색을 채움
실습
Practice 5-1
5-2. 교차 검증과 그리드 서치
개념정리
검증 세트
- 하이퍼파라미터 튜닝을 위해 모델을 평가할 때 테스트 세트를 사용하지 않기 위해 훈련 세트에서 다시 떼어 낸 데이터 세트
교차 검증
- 훈련 세트를 여러 폴드로 나눈 다음 한 폴드가 검증 세트의 역할을 하고 나머지 폴드에서는 모델을 훈련해서 모든 폴드에 대해 검증 점수를 얻어 평균하는 방법
그리드 서치
- 하이퍼파라미터 탐색을 자동화해 주는 도구
- 탐색할 매개변수를 나열하면 교차 검증을 수행해 가장 좋은 점수의 매개변수 조합을 선택
- 마지막으로 매개변수 조합으로 최종 모델을 훈련
랜덤 서치
- 연속된 매개변수 값을 탐색할 때 유용
- 탐색할 값을 직접 나열하는 것이 아니고 탐색 값을 샘플링할 수 있는 확률 분포 객체를 전달
- 지정된 횟수만큼 샘플링해 교차 검증을 수행하므로 시스템 자원이 허락하는 만큼 탐색량을 조절 가능
패키지 및 함수
skiti-learn 패키지
cross_validate()
- 교차 검증을 수행하는 함수
- 첫 매개변수에 교차 검증을 수행할 모델 객체를 전달
- 두 번째 매개변수에는 특성, 세 번째 매개변수에는 타깃 데이터를 전달
- scoring 매개변수에 검증에 사용할 평가 지표를 지정 가능, 분류 모델은 정확도를 의미하는 'accuracy', 회귀 모델은 결정계수를 의미하는 'r2'
- cv 매개변수에 교차 검증 폴드 수나 스플리터 객체를 지정 가능, 기본값은 5, 회귀일 때는 KFold 클래스를 사용하고 분류일 때는 StratifiedKFold 클래스를 사용해 5-폴드 교차 검증을 수행
- n_jobs: 교차 검증을 수행할 때 사용할 CPU 코어 수를 지정, 기본값은 1로 하나의 코어 사용, -1로 지정하면 시스템에 있는 모든 코어를 사용
- return_train_score: Tru로 지정하면 훈련 세트의 점수도 반환, 기본값은 False
GridSearchCV
- 교차 검증으로 하이퍼파라미터 탐색을 수행
- 최상의 모델을 찾은 후 훈련 세트 전체를 사용해 최종 모델을 훈련
- 첫 번째 매개변수로 그리드 서치를 수행할 모델 객체를 전달
- 두 번째 매개변수에는 탐색할 모델의 매개변수와 값을 전달
- 나머지 매개변수는 cross_validate() 함수와 동일
RandomizedSearchCV
- 교차 검증으로 랜덤한 하이퍼파라미터 탐색을 수행, 최상의 모델을 찾은 후 훈련 세트 전체를 사용해 최종 모델을 훈련
- 첫 번째 매개변수로 그리드 서치를 수행할 모델 객체를 전달
- 두 번째 매개변수에는 탐색할 모델의 매개변수와 확률 분포 객체를 전달
- 나머지 매개변수는 cross_validate() 함수와 동일
실습
Practice 5-2
5-3. 트리의 앙상블
개념정리
앙상블 학습
- 더 좋은 예측 결과를 만들기 위해 여러 개의 모델을 훈련하는 머신러닝 알고리즘
랜덤 포레스트
- 대표적인 결정 트리 기반의 앙상블 학습법
- 부트스트랩 샘플을 사용하고 랜덤하게 일부 특성을 선택해 트리를 만듦
엑스트라 트리
- 랜덤 포레스트와 비슷하게 결정 트리를 사용해 앙상블 모델을 만들지만 부트스트랩 샘플을 사용하지 않음
- 대신 랜덤하게 노드를 분할해 과대적합을 감소시킴
그레이디언트 부스팅
- 랜덤 포레스트나 엑스트라 트리와 달리 결정 트리를 연속적으로 추가해 손실 함수를 최소화하는 앙상블 방법
- 훈련 속도가 느리지만 더 좋은 성능을 기대 가능
히스토그램 기반 그레이디언트 부스팅
- 그레이디언트 부스팅의 속도를 개선하여 안정적인 결과와 높은 성능을 도출
패키지 및 함수
skiti-learn 패키지
RandomForestClassifier
- 랜덤 포레스트 분류 클래스
- n_estimators: 앙상블을 구성할 트리의 개수를 지정, 기본값은 100
- criterion: 불순도를 지정, 기본값은 'gini'(지니 불순도), 'entropy'(엔트로피 불순도) 선택 가능
- max_depth: 트리가 성장할 최대 깊이, 기본값은 None으로 리프 노드가 순수하거나 min_samples_split보다 샘플 개수가 적을 때까지 성장
- min_samples_split: 노드를 나누기 위한 최소 샘플 개수, 기본값은 2
- max_features: 최적의 분할을 위해 탐색할 특성의 개수를 지정, 기본값은 'auto'로 특성 개수의 제곱근
- bootstrap: 부트스트랩 샘플을 사용할지 지정, 기본값은 True
- oob_score: OOB 샘플을 사용해 훈련한 모델을 평가할지 지정, 기본값은 False
- n_jobs: 병렬 실행에 사용할 CPU 코어 수를 지정, 기본값은 1로 하나의 코어를 사용, -1이면 시스템에 있는 모든 코어를 사용
- 엑스트라 트리 분류 클래스
- bootstrap: 부트스트랩 샘플을 사용할지 지정, 기본값은 False
- 나머지 매개변수는 RandomForestClassifier와 동일
GradientBoostingClassifier
- 그레이디언트 부스팅 분류 클래스
- loss 매개변수는 손실 함수를 지정, 기본값은 로지스틱 손실 함수를 의미하는 'deviance'
- learning_rate: 트리가 앙상블에 기여하는 정도를 조절, 기본값은 0.1
- subsmaple: 사용할 훈련 세트의 샘플 비율을 지정, 기본값은 1.0
- max_depth: 개별 회귀 트리의 최대 깊이, 기본값은 3
HistGradientBoostingClassifier
- 히스토그램 기반 그레이디언트 부스팅 분류 클래스
- learning_rate: 학습률(감쇠율), 기본값은 0.1이며 1.0이면 감쇠가 전혀 없음
- max_iter: 부스팅 단계를 수행하는 트리의 개수, 기본값은 100
- max_bins: 입력 데이터를 나눌 구간의 개수, 기본값은 255(최댓값), 여기에 1개의 구간이 누락된 값을 위해 추가됨
실습
Practice 5-3