본문 바로가기
study

[머신러닝] 오파 01. 의사결정나무 모델 (Decision Trees)

by Jyeonni 2022. 1. 28.

의사결정나무 모델 Decision Trees (DT)

분류 및 회귀에 사용되는 지도 학습 방법으로 데이터 특징에서 추론한 의사결정 규칙을 학습하여 결과를 예측한다.
데이터로 부터 if-then-else 의사결정 규칙으로 사인곡전 근사치를 학습한다.
트리가 깊을수록 의사결정 규칙이 더 복잡해지고 모델에 더 적합하다.

 

장점

  • 트리구조로 시각화가 가능해서 이해하기 쉽다
  • 수치형, 범주형 데이터를 모두 처리할 수 있다. 하지만 skit-learn에서는 범주형을 지원하지 않는다.

 

단점

  • 복잡하고 깊은 트리를 만들어 과적합을 발생시킬 수 있다. 최소 샘플 수 설정, 트리 최대 깊이 설정과 같은 해결방안이 있다.
  • 각 데이터에서 특징을 추론하기 때문에 위 그래프에서 볼 수 있듯이 예측 결과가 매끄럽지 않을 수 있다.

 

분류

다른 분류 알고리즘과 마찬가지로 두개의 배열이 훈련에 필요하다. x에는 (n_samples, n_features), y에는 (n_samples, ) 데이터가 들어간다.

from sklearn import tree
X = [[0, 0], [1, 1]]
Y = [0, 1]
clf = tree.DecisionTreeClassifier() # 모델 선언
clf = clf.fit(X, Y) # 데이터 훈련

훈련된 모델로 샘플 데이터의 클래스를 예측할 수 있다.

clf.predict([[2., 2.]]) # 데이터 결과 예측
Out[1]: array([1]) # 1로 예측

만약 확률이 가장 높으면서 동일한 클래스가 여러 개 있으면, 가장 낮은 인덱스를 가진 클래스를 예측한다.

clf.predict_proba([[2., 2.]])
# predict_proba의 출력은 각 클래스에 대한 확률
# 첫 번째 원소는 첫 번째 클래스의 예측 확률이고 두번째 원소는 두 번째 클래스의 예측 확률
# 확률이므로 항상 0~1 사이 값
Out[2]: array([[0., 1.]])

 

트리 구조 그리기

plot_tree 함수를 사용해서 데이터에서 추론한 특징들을 학습한 의사결정나무의 구조를 볼 수 있다.

from sklearn.datasets import load_iris
from sklearn import tree
iris = load_iris() # iris 데이터 로드
X, y = iris.data, iris.target # 데이터 입력
clf = tree.DecisionTreeClassifier() # 모델 선언
clf = clf.fit(X, y) # 학습
tree.plot_tree(clf) # 트리 구조 보기

데이터의 컬럼에 해당하는 feature의 값에 대해 특정한 하나의 값을 정하면 이를 기준으로 모든 행을 두 개의 노드로 분류 할 수 있다. 예를 들어 '날개 유무'라는 feature에는 0(날개 있음)과 1(날개 없음)이라는 값이 존재하고 이를 기준으로 삼으면 모든 행은 0과 1이라는 두 개의 노드로 분류되는 것이다. 파생된 두 개의 노드에 대해 또 새로운 feature의 특정한 값을 정하고 분류를 진행한다. 이를 반복하게 되면 데이터들이 분류가 되고 이것이 의사결정나무 모델의 원리이다.

위 트리 구조에서 볼 수 있듯이 데이터들을 한쪽 방향으로 쏠리도록 분류되며 데이터들을 공평하게 비슷한 양으로 나뉘지 않는다.

 

회귀

회귀에서는 TreeRegressor 클래스를 사용한다. 그리고 y는 정수 값 대신 부동 소수점 값을 가져야 한다.

from sklearn import tree
X = [[0, 0], [2, 2]]
y = [0.5, 2.5]
clf = tree.DecisionTreeRegressor()
clf = clf.fit(X, y)
clf.predict([[1, 1]])

 

 

참고자료

 

1.10. Decision Trees

Decision Trees (DTs) are a non-parametric supervised learning method used for classification and regression. The goal is to create a model that predicts the value of a target variable by learning s...

scikit-learn.org

 

Lv1 모델링 python 파이썬 2/6 모델개념(의사결정나무)

#오늘의 파이썬 #1일1오파 #파이썬 # python

dacon.io

 

댓글