우당탕탕 개발일지
[혼공머신] 5-1. 결정트리 본문
💡 로지스틱 회귀로 와인 분류하기(Logistic Regression)
결정트리를 이용하기 전에 먼저 로지스틱 회귀를 이용해서 와인을 분류해본다.
로지스틱 회귀 모델에서는 표준화 전처리 잊지 않기!
로지스틱 회귀 모델의 단점: 모델이 왜 저러 계수 값을 학습했는지 이해하기 어렵다.
print(lr.coef_, lr.intercept_)
# 결과: [[ 0.4270427 0.35107217 -4.06298437]] [8.48363274]
각 값이 무엇을 의미하는지 설명하기 어렵다.
해결방법: 설명하기 쉬운 결정 트리를 이용한다.
💡 결정 트리(Decision Tree)
스무 고개처럼 계속 질문을 추가하며 분류하는 모델로, 설명하기 쉬운 모델에 속한다.
사이킷런의 DecisionTreeClassifier 클래스를 사용한다.
결정 트리 모델 불러오기
from sklearn.tree import DecisionTreeClassifier
dt = DecisionTreeClassifier(random_state = 42)
dt.fit(train_input, train_target)
결정 트리의 훈련 점수, 테스트 점수
트리 그림 그리기
사이킷런의 plot_tree() 함수를 사용해서 결정 트리를 그림으로 표현할 수 있다.
하지만 매개변수를 지정해주지 않으면 이렇게 복잡한 그림이 나온다.
설명하기 쉬운 결정트리인데 그림을 이렇게 그리면 아무것도 볼 수가 없으니,
매개변수를 지정해서 해석하기 쉬운 트리 그림을 그려준다.
plot_tree() 함수의 매개변수:
1. max_depth: 트리의 깊이
2. filled = True: 클래스에 맞게 노드의 색을 칠한다. 어떤 클래스의 비율이 높아지만 점점 진한 색으로 표시한다.
3. feature_names = ['alcohol', 'sugar', 'pH']: 특성의 이름을 명시해준다.
매개변수를 지정한 뒤 트리 그림을 그리면 아래와 같다.
# 트리 그림
plt.figure(figsize = (10, 7))
plot_tree(dt, filled = True, feature_names= ['alcohol', 'sugar', 'pH']) # max_depth 매개변수는 DecisionTreeClassifier()에서 지정할 수도 있고 2)plot_tree()에서 지정할 수도 있다.
plt.show()
결과적으로 리프 노드에서 가장 많은 클래스가 예측 클래스가 된다. 왼쪽 자식 노드의 경우 value = [1177, 1745]이므로 양성 클래스인 화이트 와인으로 예측한다. 오른쪽 자식 노드의 경우 value = [81, 2194]이므로 양성 클래스인 화이트 와인으로 예측한다.
만약 이 결정 트리의 성장을 여기서 멈춘다면 왼쪽 노드에 도달한 샘플과 오른쪽 노드에 도달한 샘플은 모두 양성 클래스로 예측된다.
💡 불순도(Impurity)
불순도는 노드에서 데이터를 분할할 기준을 정하며, criterion 매개변수를 이용하여 불순도의 종류를 정한다.
불순도는 1) gini 지니 불순도 2) entropy 엔트로피 불순도 - 총 2가지가 있다.
1) gini 지니 불순도
지니 불순도 = 1 - ( (양성 클래스 비율)^2 + (음성 클래스 비율) ^2 )
결정 트리 모델은 부모 노드와 자식 노드의 불순도 차이가 가능한 크도록 트리를 성장시킨다.
부모 노드와 자식 노드의 불순도 차이를 정보 이득이라고 한다.
정보 이득 = 부모 노드의 불순도 - (왼쪽 노드의 샘플 비율 * 왼쪽 자식 노드의 불순도) - (오른쪽 노드의 샘플 비율 * 오른쪽 자식 노드의 불순도)
2) entropy 엔트로피 불순도
엔트로피 불순도 = - (음성 클래스 비율) * log_2(음성 클래스 비율) - (양성 클래스 비율) * log_2(양성 클래스 비율)
결론짓자면, 결정 트리 모델은 불순도를 기준으로 정보 이득을 최대화하도록 노드를 분하랗ㄴ다.
새로운 샘플을 예측할 때 노드의 질문에 따라 트리를 이동하게 되고,
불순도(gini/entropy) 사용해서 테스트 조건을 결정하게 된다.
💡 가지치기
트리의 최대 깊이 지정(max_depth 매개변수 지정)
그리고 결정 트리는 표준화 전처리 과정 불필요하다.
가지치기를 통해 max_depth = 3으로 지정하면 결과가 다음과 같이 나온다.
💡 특성 중요도(Feature Importances)
어떤 특성이 가장 유용한지 나타낸다.
'인공지능' 카테고리의 다른 글
[혼공머신] 5-3. 트리의 앙상블 (0) | 2025.01.28 |
---|---|
[혼공머신] 5-2. 교차 검증과 그리드 서치 (0) | 2025.01.28 |
[혼공머신] 4-2. 확률적 경사 하강법 (1) | 2025.01.14 |
[혼공머신] 4-1. 로지스틱 회귀 (0) | 2025.01.14 |
[혼공머신] 3-3 다중 회귀, 특성 공학, 사이킷런의 변환기 클래스 PolynomialFeatures (0) | 2025.01.13 |