1. 결정트리
- 여러 단계의 복잡한 조건을 갖는 문제와 그 조건과 그에 따른 해결방법을 트리 형태로 나타낸 것. 모든 비종점 노드가 하나의 결정을 나타내는 이진트리.
- 사이킷런의 DecisionTreeClassifier클래스를 사용한다.
from sklearn.tree import DecisionTreeClassifier
#random_state를 지정하는 이유는 같은 결과가 나오기 위해서이다. 평소에는 따로 지정하지 않아도 된다.
dt = DecisionTreeClassifier(random_state=42)
dt.fit(train_scaled, train_target)
print(dt.score(train_scaled, train_target))
>> 0.996921300750433
print(dt.score(test_scaled, test_target))
>> 0.8592307692307692
- 위에서 구한 모델을 아래와 같이 그림으로 표현이 가능하다.
import matplotlib.pyplot as plt
from sklearn.tree import plot_tree
plt.figure(figsize=(10,7))
plot_tree(dt)
plt.show()
<실행결과>
- 결정 트리는 위에서 부터 거꾸로 자라난다.
- 맨 위의 노드를 루트(root)노드라고 부르고, 맨 아래의 노드를 리프(leaf) 노드라고 부른다.
- 노드란 결정 트리를 구성하는 핵심 요소로, 훈련 데이터의 특성에 대한 테스트를 표현한다.
- 트리의 가지(branch)는 테스트의 결과(True,False)를 나타내며 일반적으로 하나의 노드는 2개의 가지를 가진다.
- 결정트리가 리프노드에서 가장 많은 클래스가 예측클래스를 두는 형태로 타깃값을 예측한다.
-특성값의 스케일이 결정트리 알고리즘에 아무런 영향을 미치지 않으므로, 표준화 전처리를 할 필요가 없다.
- 매개변수로 트리의 크기를 조정할 수 있다.
plt.figure(figsize=(10,7))
plot_tree(dt, max_depth=1, filled=True, feature_names=['alcohol', 'sugar', 'pH'])
plt.show()
- max_depth : 루트 노드를 제외하고 얼마나 더 확장할지 결정(1로 설정할 경우 총 층수는 2층이 된다)
- filled: 클래스에 맞게 노드의 색을 칠할지 결정
- feature_names: 특성의 이름을 전달
import matplotlib.pyplot as plt
from sklearn.tree import plot_tree
plt.figure(figsize=(10,7))
plot_tree(dt)
plt.show()
2. 불순도
<지니 불순도>
- DecisionTreeClassifier 클래스의 criterion 매개변수의 기본값 이기도 하다.
- criterion 매개변수의 용도는 노드에서 데이터를 분할할 기준을 정하는 것이다.
- 두 클래스의 비율이 정확히 1/2이면, 지니 불순도는 0.5가 되어 최악이 된다.
- 노드에 하나의 클래스만 있으면 지니 불순도는 0이 된다.
<정보이득>
- 결정 트리 모델은 부모노드와 자식노드의 불순도 차이가 가능한 크도록 트리를 성장 시킨다.
- 부모노드와 자식노드의 불순도 차이를 정보 이득이라고 한다.
<엔트로피 불순도>
- 엔트로프 불순도는 밑이 2인 로그를 사용해서 곱한다.
- DecisionTreeClassifier클래스에서 사용하려면 criterion=entropy를 지정하면 된다.
<전체 소스 코드>
링크 : bit.ly/hg-05-1
'혼공단 > 혼공단 5기' 카테고리의 다른 글
혼자 공부하는 머신러닝 + 딥러닝 5장 - 트리의 앙상블 (0) | 2021.02.19 |
---|---|
혼자 공부하는 머신러닝 + 딥러닝 5장 - 교차 검증과 그리드 서치 (0) | 2021.02.18 |
[혼공단 5기] 혼자 공부하는 머신러닝 + 딥러닝 3주차 후기 및 미션 인증 (0) | 2021.02.12 |
혼자 공부하는 머신러닝 + 딥러닝 4장 - 확률적 경사 하강법 (0) | 2021.02.12 |
혼자 공부하는 머신러닝 + 딥러닝 4장 - 로지스틱 회귀 (0) | 2021.02.11 |