- 결정 트리(Decision Tree)는 회귀 및 분류 작업 모두에 사용할 수 있는 널리 사용되는 기계 학습 알고리즘입니다. 트리는 기능 값을 기반으로 데이터를 하위 집합으로 재귀적으로 분할하여 구성됩니다. CART(Classification and Regression Trees)는 의사 결정 트리를 구축하는 데 널리 사용되는 알고리즘입니다.
- CART는 기능과 임계값을 선택하여 데이터를 두 개의 하위 집합으로 분할하는 방식으로 작동합니다. 그런 다음 알고리즘은 트리가 최대 깊이에 도달하거나 노드의 인스턴스 수가 특정 임계값 아래로 떨어질 때와 같이 중지 기준이 충족될 때까지 각 하위 집합에서 이 프로세스를 재귀적으로 반복합니다.
- 분류 작업에서 CART는 분할 품질을 평가하기 위한 불순도 측정값으로 Gini 지수를 사용합니다. Gini 지수는 주어진 노드에서 무작위로 선택된 인스턴스를 잘못 분류할 확률을 측정합니다. 지니 지수가 낮을수록 더 순수한 노드와 더 나은 분할을 나타냅니다.
- 회귀 작업에서 CART는 평균 제곱 오차(MSE)를 불순도 측정값으로 사용합니다. MSE는 주어진 노드에서 예측 값과 실제 값 사이의 평균 제곱 거리를 측정합니다. MSE가 낮을수록 더 나은 분할을 나타냅니다.
- 다음은 scikit-learn 라이브러리를 사용하여 Python에서 CART를 간단하게 구현한 것입니다.
from sklearn.tree import DecisionTreeClassifier, DecisionTreeRegressor
from sklearn.datasets import load_iris, load_boston
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, mean_squared_error
# Load iris dataset
iris = load_iris()
X, y = iris.data, iris.target
# Split dataset into train and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Create decision tree classifier
clf = DecisionTreeClassifier()
# Train the model on the train set
clf.fit(X_train, y_train)
# Predict on the test set
y_pred = clf.predict(X_test)
# Calculate accuracy score
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
# Load Boston Housing dataset
boston = load_boston()
X, y = boston.data, boston.target
# Split dataset into train and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Create decision tree regressor
reg = DecisionTreeRegressor()
# Train the model on the train set
reg.fit(X_train, y_train)
# Predict on the test set
y_pred = reg.predict(X_test)
# Calculate mean squared error
mse = mean_squared_error(y_test, y_pred)
print("MSE:", mse)
출처: https://riverzayden.tistory.com/6
- 이 코드에서는 먼저 scikit-learn의 load_iris 및 load_boston 함수를 사용하여 iris(분류 데이터 세트)와 Boston Housing(회귀 데이터 세트)의 두 데이터 세트를 로드합니다. 그런 다음 train_test_split 함수를 사용하여 각 데이터 세트를 학습 및 테스트 세트로 분할합니다.
- iris 데이터 세트
- iris 데이터 세트에는 setosa, versicolor 및 virginica의 세 종에 각각 50개의 인스턴스가 있는 150개의 붓꽃 인스턴스가 포함되어 있습니다. 각 인스턴스에는 꽃받침 길이, 꽃받침 너비, 꽃잎 길이 및 꽃잎 너비의 네 가지 기능이 있습니다. 목표는 홍채의 새 인스턴스를 특성에 따라 올바른 종으로 분류할 수 있는 모델을 구축하는 것입니다.
- 이 예제에서는 아이리스 꽃을 특성에 따라 종으로 분류하기 위한 의사결정 트리를 구축합니다. 트리는 150개의 모든 인스턴스를 포함하는 루트 노드로 시작합니다. 알고리즘은 결과 하위 집합의 순도를 최대화하는 기능 및 임계값을 선택합니다. 이 경우 알고리즘은 꽃잎 길이를 분할 함수로 선택하고 꽃잎 길이가 2.45cm 이하인지 여부에 따라 데이터를 두 개의 하위 집합으로 분할합니다.
- 나무의 왼쪽 가지는 붓꽃에 해당하며 꽃잎의 길이는 2.45cm 미만이며 대부분이 setosa 종입니다. 나무의 오른쪽 가지는 길이가 2.45cm가 넘는 꽃잎을 가진 붓꽃에 해당하며, 대부분은 versicolor와 virginica 종입니다. 알고리즘은 새 인스턴스에 대해 예측된 종에 해당하는 최종 리프 노드에 도달할 때까지 데이터를 반복적으로 분할합니다.
- boston housing 데이터 세트
- Boston Housing 데이터 세트에는 보스턴에 있는 506개의 주택 인스턴스가 포함되어 있으며 객실 수, 범죄율 및 직업 센터까지의 거리를 포함한 13개의 기능이 있습니다. 목표는 자가 거주 주택의 특성을 기반으로 수천 달러의 중간 가치를 예측할 수 있는 모델을 구축하는 것입니다.
- 이 예에서는 기능을 기반으로 소유자 점유 주택의 중앙값을 예측하는 의사 결정 트리를 구축합니다. 트리는 506개의 인스턴스를 모두 포함하는 루트 노드로 시작합니다. 알고리즘은 결과 하위 집합의 평균 제곱 오차(MSE)를 최소화하는 기능 및 임계값을 선택합니다. 이 경우 알고리즘은 분할 기능으로 객실 수를 선택하고 객실 수가 6.94보다 작거나 같은지 여부에 따라 데이터를 두 개의 하위 집합으로 분할합니다.
- 트리의 왼쪽 가지는 중앙값이 낮은 6.94개 미만의 방이 있는 주택에 해당합니다. 트리의 오른쪽 가지는 방이 6.94개 이상인 주택에 해당하며 중앙값이 더 높습니다. 알고리즘은 새 인스턴스에 대해 예측된 중앙값에 해당하는 최종 리프 노드에 도달할 때까지 데이터를 재귀적으로 계속 분할합니다.
- 다음으로 scikit-learn의 DecisionTreeClassifier 및 DecisionTreeRegressor 클래스를 각각 사용하여 붓꽃 데이터 세트에 대한 의사 결정 트리 분류자와 보스턴 주택 데이터 세트에 대한 의사 결정 트리 회귀자를 만듭니다. 우리는 적합 방법을 사용하여 훈련 세트에서 각 모델을 훈련하고 예측 방법을 사용하여 테스트 세트에서 예측합니다.
- 마지막으로 scikit-learn의 Accuracy_score 및 mean_squared_error 함수를 사용하여 분류 작업의 정확도 점수와 회귀 작업의 평균 제곱 오차를 사용하여 각 모델의 성능을 평가합니다.
- 이것은 CART의 기본 구현일 뿐이며 모델의 성능을 개선하기 위해 조정할 수 있는 많은 하이퍼파라미터가 있습니다.