[혼자 공부하는 ML+DL] #4 - 트리 알고리즘

hu22·2023년 8월 22일
0
post-thumbnail
본 내용은 한빛미디어의 [혼자 공부하는 머신러닝+딥러닝]을 참고하였습니다.

05. 트리 알고리즘(화이트 와인을 찾아라!)

05-1. 결정 트리

  • 로지스틱 회귀로 와인 분류하기
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression

wine= pd.read_csv('https://bit.ly/wine-date')

data = wine[['alcohol','sugar','pH']].to_numpy()
target = wine[['class']].to_numpy()


train_input, test_input, train_target, test_target = train_test_split(data, target, test_size=0.2, random_state=42) #data 훈련세트, 테스트세트로 나누기

ss = StandardScaler()
ss.fit(train_input)
train_scaled = ss.transform(train_input)
test_scaled = ss.transform(test_input) #데이터 정규화

lr = LogisticRegression()
lr.fit(train_scaled, train_target)
print(lr.score(train_scaled, train_target))
print(lr.score(test_scaled, test_target)) 
# -> 0.7808350971714451, 0.7776923076923077
# 점수가 모두 낮으므로 과소적합.

-> 로지스틱 회귀로 분류했을 때, 과소적합이 일어남 + 결과를 설명하기 어려움

  • 결정 트리 : 예/아니오에 대한 질문을 이어나가면서 정답을 찾아 학습하는 알고리즘. 비교적 예측 과정을 이해하기 쉽고 성능도 뛰어남.
  • 결정트리로 와인 분류하기
from sklearn.tree import DecisionTreeClassifier

dt = DecisionTreeClassifier(random_state=42) 
dt.fit(train_scaled, train_target) #결정 트리 학습
print(dt.score(train_scaled, train_target))
print(dt.score(test_scaled, test_target))
# -> 0.996921300750433, 0.8592307692307692

-> 훈련 세트에 대한 점수가 엎청 높은 것을 확인할 수 있음.

import matplotlib.pyplot as plt
from sklearn.tree import plot_tree
plt.figure(figsize=(10,7))
plot_tree(dt)
plt.show()

위의 코드로 트리의 모양을 확인할 수도 있음

  • 노드 : 결정 트리를 구성하는 핵심 요소. 훈련 데이터의 특성에 대한 테스트를 표현. 맨 위를 루트, 맨 아래를 리프 노드라고 부름.
  • 불순도 : 결정 트리가 최적의 질문을 찾기 위한 기준. 사이킷런에서는 보통 지니와 엔트로피 불순도를 사용함.
  • 정보이득 : 부모 노드와 자식 노드의 불순도 차이, 결정 트리는 이를 최대화 하도록 학습함.

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

  • 검증 세트(validation set) : 하이퍼파라미터 튜닝을 위해 모델을 평가할 때, 테스트 세트를 사용하지 않기 위해 훈련 세트에서 다시 떼어넨 데이터 세트. 보통 train set, validation set, test set을 6:2:2의 비율로 나눔.
  • 교차 검증 : 훈련 세트를 여러 fold로 나눈 다음 한 fold가 validation set을 담당하고 나머지 fold에서는 모델을 훈련하는 방식을을 모든 fold에 대해 해서 검증 점수를 얻고 평균내는 방법
  • 그리드 서치 : 하이퍼파라미터 탐색을 자동화 해주는 도구. 탐색할 매개벼수를 나열하여 교차 검증을 수행하고 가장 좋은 검증 점수의 매개변수 조합을 선택.
  • 랜덤 서치 : 탐색할 값을 직접 나열하는 것이 아니라 탐색 값을 샘플링 할 수 있는 확률 분포 객체를 전달. 지정된 횟수만큼 생플링하여 교차 검증을 수행. 연속된 매개변수 값을 탐색할 때 유용함.

05-3. 트리의 앙상블

  • 앙상블 : 더 좋은 예측 결과를 만들기 위해 여러 개의 모델을 훈련하는 머신러닝 알고리즘.
  • 랜덤 포레스트 : 대표적인 결정 트리 기반의 앙상블 학습 방법. 부트스트랩 샘플을 사용하고 랜덤하게 일부 특성을 선택하여 트리를 만듦
  • 엑스트라 트리 : 랜덤 포레스트와 비슷하지만 부트스트랩 샘플을 사용하지 않고 노드를 랜덤하게 분할해 overfitting을 감소시킴.
  • 그레이디언트 부스팅 : 위의 두개 알고리즘과 달리 결정 트리를 연속적으로 추가하여 손실 함수를 최소화 하는 앙상블 방법. 훈련 속도는 조금 느리지만 더 좋은 성능을 기대할 수 있음.
  • 히스토그램 기반 그레이디언트 부스팅 : 그레이디언트 부스팅의 속도를 개선한 방법
profile
ai 개발자를 꿈꾸는 대학생

0개의 댓글

관련 채용 정보