Inflearn コミュニティ Q&A
결정트리에서 적절한 깊이 선택 후 시각화 과정에서 학습 데이터만 사용하는 이유
解決済みの質問
作成
·
12
0
안녕하세요, 강사님.
수업에서 다루지 않은 내용이지만 질문할 곳이 없어 이렇게 글을 남깁니다.
저는 혼자서 코드 필사를 하며 머신러닝을 공부하고 있는데, 일부 코드가 이해가 잘 되지 않아 문의드립니다.
제가 질문하고 싶은 코드의 흐름은 다음과 같습니다.
트리 깊이에 따라 모델 성능 비교
적절한 트리 깊이 선택
선택한 트리를 시각화
코드 필사를 하면서 트리 깊이를 선택하는 과정은 이해했지만, 트리 깊이를 선택한 후에 트리를 시각화하기 전에 학습 데이터만 사용하여 모델을 fit하는 것이 의문이 들었습니다.
model = DecisionTreeClassifier(max_depth=5, criterion='entropy')
model.fit(X.iloc[train_idx], Y.iloc[train_idx])
개인적으로는 타겟값 원인 분석을 위해 학습 데이터와 검증 데이터를 함께 사용하는 것이 더 나을 것 같은데, 이 부분이 맞는지 확신이 서지 않아 문의드립니다.
혹시 이에 대해 설명해주실 수 있을까요?
아래는 질문 관련 코드입니다.
# Parameter Searching ==> Depth 2 ~ 10
for i in range(2,11,1):
print(">>>> Depth {}".format(i))
model = DecisionTreeClassifier(max_depth=i, criterion='entropy')
model.fit(X.iloc[train_idx], Y.iloc[train_idx])
# Train Acc
y_pre_train = model.predict(X.iloc[train_idx])
cm_train = confusion_matrix(Y.iloc[train_idx], y_pre_train)
print("Train Confusion Matrix")
print(cm_train)
print("Train Acc : {}".format((cm_train[0,0] + cm_train[1,1])/cm_train.sum()))
# Test Acc
y_pre_test = model.predict(X.iloc[valid_idx])
cm_test = confusion_matrix(Y.iloc[valid_idx], y_pre_test)
print("Valid Confusion Matrix")
print(cm_test)
print("TesT Acc : {}".format((cm_test[0,0] + cm_test[1,1])/cm_test.sum()))
print("-----------------------------------------------------------------------")
print("-----------------------------------------------------------------------")
# Depth가 깊어질 수록 정확도는 높게 나오지만 해석력에 대한 가독성을 위해 Depth 5를 선택함
model = DecisionTreeClassifier(max_depth=5, criterion='entropy')
model.fit(X.iloc[train_idx], Y.iloc[train_idx])
from sklearn import tree
# Creating the tree plot
# Creating the tree plot (left = True, Right = False)
tree.plot_tree(model, filled=True, feature_names=X.columns, class_names = ['BAD', 'GOOD'])
plt.rcParams['figure.figsize'] = [40,10]
回答 2
0
기초에서는 학습 데이터로만 fit하는 것을 알려드리고 있고
실제 현업에서는 그것도 중요한 데이터이기에 K-fold 크로스 벨리데이션 방법을 사용해
모든 데이터를 사용하고 평가해보고 있습니다. 이 방법을 사용하면 모든 데이터를 학습과 검증에 번갈아 사용할 수 있고 보다 안정적인 성능 평가가 가능합니다
0
안녕하세요, 김민식님. 인프런 AI 인턴입니다.
머신러닝 모델을 구축하고 적절한 하이퍼파라미터를 선택하는 과정에서 발생하는 여러 가지 질문은 매우 자연스러운 것 같습니다. 김민식님께서 언급하신 것은 결정 트리를 시각화하기 위해 학습 데이터만 사용하는 이유인데, 이는 주로 모델의 최종적인 성능 보다는 구조적 해석에 집중하고자 할 때 발생하는 선택입니다.
결정 트리의 학습과 시각화
모델 성능 최적화와 해석력: 결정 트리 깊이가 깊어질수록 훈련 데이터에서는 성능이 좋아질 수 있지만, 이는 과적합(overfitting)의 위험을 키울 수도 있습니다. 따라서 적절한 깊이를 선택하는 것이 중요하며, 이는 보통 학습 및 검증 데이터를 함께 사용하여 결정하게 됩니다. 김민식님이 구현한 코드에서도 이 과정을 통해 최적의 깊이를 찾으신 것입니다.
학습 데이터 사용 이유: 시각화는 주로 트리 구조가 얼마나 잘 나왔는지를 분석하는 데 집중합니다. 시각화를 할 때 학습 데이터를 사용하는 이유는 모델이 학습한 내용을 충분히 반영하고, 그 과정에서 어떤 피처가 중요하게 작용했는지를 파악하기 위함입니다. 즉, 해석력에 초점을 두고 학습 데이터만을 이용해 트리 구조를 제공합니다.
학습 데이터와의 관계: 검증 데이터는 일반적으로 모델의 성능 평가에 사용됩니다. 그러나 시각화는 모델의 전반적인 해석력을 높이고, 트리 구조 자체를 이해하는 데 초점을 둡니다. 따라서 꼭 학습 데이터만 사용한다고 하더라도 문제는 없으며, 보다 명확한 트리 구조를 확인할 수 있습니다.
이와 관련하여 더 많은 공부를 원하신다면, 이전 질문에서 다른 학습자들이 트리 깊이와 관련된 탐색 과정을 진행한 적이 있습니다. 해당 링크에서는 결정 트리의 깊이에 따른 모델 성능 및 최적화 전략들을 다양한 관점에서 이해할 수 있으니 참고해 보세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





