핸즈온 머신러닝 - Part1. 머신러닝 ch6. 결정 트리

govlKH·2023년 9월 8일
0

핸즈온 머신러닝

목록 보기
5/15

핸즈온 머신러닝

Part1. 머신러닝 ch6. 결정 트리

1. 결정 트리 학습 및 시각화

from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier

iris = load_iris()
X = iris.data[:, 2:]
y = iris.target

dt = DecisionTreeClassifier(max_depth=2)
dt.fit(X, y)

---

from sklearn.tree import export_graphviz

export_graphviz(
    dt,
    out_file='iris_tree.dot',  # 파일 경로를 직접 지정합니다.
    feature_names=iris.feature_names[2:],
    class_names=iris.target_names,
    rounded=True,
    filled=True
)

---

!dot -Tpng iris_tree.dot -o iris_tree.png

---

from IPython.display import Image
Image(filename='iris_tree.png')

2. 지니불순도 & 엔트로피

아래는 깊이 2에 대한 불순도 측정입니다.

Q. 둘 중 어떤 것을 사용해야 할까요?
사실 실제로는 큰 차이는 없습니다. 지니 불순도가 좀 더 빠르긴 하기에 default로 사용하지만, 지니 불순도는 다른 트리가 만들어 지는 경우 가장 빈도가 높은 클래스를 한쪽 가지로 고립시키는 경향이 있는 반면 엔트로피는 조금 더 균형 잡힌 트리를 만들어 냅니다.

3. 규제 매개변수

결정트리와 같이 파라미터 수가 결정되지 않은 모델을 비파라미터 모델이라고 하며, 선형 모델과 같이 파라미터 수가 결정되어 있는 모델은 파라미터 모델이라고 합니다. 비파라미터 모델의 경우 모델의 구조가 자유롭지만, 과대 적합의 위험이 있습니다. 반면 파라미터 모델은 자유도가 제한되기에 과대적합될 위험이 줄어듭니다.

결정 트리의 형태를 제한하는 매개변수들은 아래와 같습니다.

def _ _ init __ (*, criterion='gini', splitter='best', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, class_weight=None, ccp_alpha=0.0)

4. 회귀 트리

from sklearn.tree import DecisionTreeRegressor
 
tree = DecisionTreeRegressor(max_depth=2)
tree.fit(X, y)

5. 결정트리의 장단점

결정트리는 이해하고 해석하기 쉽습니다. 또한 사용하기에도 편리하지만 단점 또한 존재합니다.

결정 트리는 계단 모양의 결정 경계를 만듭니다. 그렇기에 데이터가 회전했을 때 경계를 더 세밀하게(구불구불하게) 변경해야 하기도 하기에 일반화가 잘 안 될수도 있습니다.

이런 불안정성 문제를 해결하는 한 가지 방법은 훈련 데이터 를 더 좋은 방향으로 회전시키는 PCA 기법을 사용하는 것 입니다.

profile
수학과 대학원생. 한 걸음씩 꾸준히

0개의 댓글