6. 결정 트리(Decision Tree)

2021. 5. 4. 17:02Machine Learning

결정 트리(Decision Tree)는 분류, 회귀, 다중출력 작업이 가능한 머신러닝 알고리즘 중 하나다. 

 

결정 트리의 분류 방법

출처 : www.w3schools.com/python/python_ml_decision_tree.asp

결정 트리의 분류 방법을 살펴보자. 먼저 결정 트리는 루트 노드에서 특정 조건을 기준으로 샘플들을 

 

두 부류로 나눈다. 자식 노드들에서도 마찬가지고 해당 노드의 조건을 기준으로 샘플들을 나누고

 

리프 노드에 도달하게되면 모든 분류를 멈춘다. 

 

노드의 gini 특성 은 노드의 불순도를 의미하며, sample 특성 은 해당 노드에 있는 샘플수를 의미한다. 

 

value 특성 은 해당 노드에 클래스별로 샘플들이 얼마나 있는지를 나타낸다. 

 

지니 불순도

각 노드는 i번째 클래스에 속한 샘플의 비율(클래스 i에 속한 샘플 수 / 해당 노드 전체 샘플 수)의 제곱을

 

클래스 별로 계산하여 합한 값을 1에서 뺀 값이 해당 노드의 지니 불순도이다. 

 

지니 불순도가 0에 가까울 수록 해당 노드는 '순수하다 ' 고 한다. 

 

 

노드 분류의 기준


 

결정 트리에서 노드를 분류할 때, 어떤 특성을 선택하고 특정 임계값을 기준으로 노드를 분류하는데, 

 

어떤 기준으로 해당 특성과 임계값을 분류할까?

 

CART 비용함수

(m = 샘플 수, G = 불순도)

 

사이킷런의 결정 트리에서는 CART 비용 함수를 통해 모델을 훈련 시킨다. 비용함수가 가장 작은 지점이 노드를 가장 

 

낮은 불순도로 분류하는 것이므로 특성 k와 임계값 t_k 가 선택된다. max_depth에 도달하거나 불순도를 줄이는 것이 

 

불가능할 경우 분류가 중지된다. 

 

 

엔트로피


지니 불순도 대신 엔트로피 불순도를 사용할 수 있다. (criteria 파라미터를 "entropy"로 지정)

 

엔트로피 불순도

엔트로피 불순도는 지니 불순도보다 균형 잡힌 결정 트리를 만든다. 

 

 

 

 

회귀


결정 트리를 회귀 모델에도 사용 가능하다. 

 

	from sklearn.tree import DecisionTreeRegressor
	from sklearn.tree import DecisionTreeClassifier, export_graphviz
    
	X = 2*np.random.randn(100,1)
	y = 2 * X ** 2 + X * 4 + 10 + np.random.randn(100, 1)
    
	tree_reg = DecisionTreeRegressor(max_depth=2)
	tree_reg.fit(X,y)

max_depth를 2로 설정하여 결정 트리 회귀 모델을 훈련시켰다. 

 

 

    export_graphviz(tree_reg, out_file="poly_tree.dot", feature_names='x', class_names=y, rounded=True, filled=True)
   
    X_new = np.linspace(-4,5,100).reshape(-1,1)
    y_pred = tree_reg.predict(X_new)
    
    plt.scatter(X, y)
    plt.scatter(X_new, y_pred, c='red', s=10)
    plt.xlabel('X')
    plt.ylabel('y')
    plt.legend(['train_set','predict'])
    plt.grid(linestyle='dotted')
    plt.show()

 

결정 트리 시각화를 위해 export_graphviz를 호출하여 dot 파일로 해당 트리를 저장하고, 잘 예측을 하는지 살펴보았다.

max_depth 2인 결정트리의 예측

 

dot -> png로 변경

아나콘다 프롬프트에서 png파일로 변환한 뒤 결정 트리를 살펴보았다. 

 

max_depth가 2인 결정트리

예측값은 샘플 자신이 속한 리프 노드의 전체 샘플의 예측값의 평균이 된다. 

 

scatter 그래프에서도 볼 수 있듯이 x 값이 -4 ~ 2.3 구간에 샘플들이 가장 많이 속해있고, MSE값도 상당히 높게

 

측정된다. 다시 말해, 샘플 수가 많은 구간에서는 결정 트리의 성능이 좋지 못하다.

 

max depth 5인 결정 트리의 예측

이번에는 max_depth를 5로 설정했을 때의 예측이다. 

 

max_depth 5인 결정트리

확실히 결정트리의 최대 깊이가 깊어질 수록 결정트리의 예측값이 높아진다. 

 

리프 노드에 속한 노드들도 균등하게 보통 10개 미만의 샘플들을 담고 있다. 

 

결정 트리 회귀 모델의 비용함수

 

결정 트리 회귀 모델에서는 노드를 분류할 때, 지니 불순도를 최소화하는 방식이 아니라 

 

MSE를 최소화하는 방식으로 분류한다.