Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬에서 의사결정 트리 회귀(DecisionTreeRegressor)를 구현하는 방법

의사결정 트리란 무엇인가?

의사결정 트리(Decision Tree)는 랜덤 포레스트(Random Forest) 알고리즘의 기본 구성 요소입니다. 머신러닝에서 가장 널리 사용되는 알고리즘 중 하나로, 분류(Classification) 작업에 주로 활용됩니다. 의사결정 트리가 내린 결정은 특정 예측이 왜 이루어졌는지 설명해 주기 때문에, 사용자가 과정 전반의 입력과 출력을 명확하게 이해할 수 있다는 큰 장점이 있습니다. 의사결정 트리는 CART(Classification And Regression Trees), 즉 '분류 및 회귀 트리'라고도 불리며, 자료구조에서 배우는 이진 트리(binary tree) 형태로 시각화할 수 있습니다.

트리의 모든 노드(node)는 하나의 입력 변수를 나타내며, 말단 노드(leaf node, terminal node라고도 함)에는 출력 변수가 담겨 있습니다. 이러한 말단 노드를 통해 해당 노드에 대한 예측이 수행됩니다. 의사결정 트리를 생성할 때의 기본 아이디어는 주어진 데이터 공간을 여러 구역으로 나누는 것입니다. 모든 값을 대상으로 다양한 분할(split)을 시도하여 비용(cost)을 최소화하고 가장 좋은 예측값을 얻으며, 이때 값들은 탐욕적(greedy) 방식으로 선택됩니다.

노드 분할은 트리의 최대 깊이(maximum depth)에 도달할 때까지 계속 진행됩니다. 의사결정 트리를 사용하는 핵심 목적은 특정 특징(feature) 값을 기준으로 입력 데이터셋을 더 작은 데이터셋으로 반복적으로 나누어, 모든 타깃 변수가 하나의 범주에 속하도록 만드는 것입니다. 이러한 분할은 매 단계에서 정보 이득(information gain)을 최대화하기 위해 수행됩니다.

모든 의사결정 트리는 루트(root)에서 시작하며, 루트는 첫 번째 분할이 이루어지는 지점입니다. 따라서 노드들이 적절하게 정의되도록 효율적인 방법을 고안하는 것이 중요합니다.

바로 이 지점에서 지니(Gini) 값이 등장합니다. 지니 계수는 불평등도(inequality)를 측정하는 데 가장 널리 사용되는 지표 중 하나입니다. 여기서 불평등이란 노드 내 각 하위 집합이 속할 수 있는 타깃 클래스(출력)의 분포를 의미합니다.

DecisionTreeRegressor를 사용할 때는 다음과 같은 문법이 사용됩니다 −

class sklearn.tree.DecisionTreeRegressor (*, criterion='mse',…

이제 DecisionTreeRegressor를 실제로 어떻게 활용하는지 예제를 통해 살펴보겠습니다 −

예제

from sklearn import tree
my_data = [[1, 1], [5, 5], [2,3], [7,11]]
target_vals = [0.1, 1.5, 0.75, 1.73]
clf = tree.DecisionTreeRegressor()
print("The decision tree regressor has been called")
DTreg = clf.fit(my_data, target_vals)
print("Data has been fit")
pred_val = DTreg.predict([[4, 7]])
print("The predicted data is ")
print(pred_val)

출력 결과

The decision tree regressor has been called
Data has been fit
The predicted data is 
[1.5]

코드 설명

  • 필요한 패키지(sklearn의 tree 모듈)를 환경에 임포트합니다.
  • 특징 벡터(my_data)와 타깃 값(target_vals)을 정의합니다.
  • DecisionTreeRegressor 객체를 생성하고, fit() 메서드를 호출하여 데이터를 모델에 학습시킵니다.
  • 'predict' 함수를 사용하여 새로운 특징 값 [4, 7]에 대한 예측값을 계산합니다.
  • 예측 결과가 콘솔에 출력됩니다. 이 예제에서는 학습된 데이터를 기반으로 1.5라는 값이 예측되었습니다.