결정 트리(Decision Tree)는
트리 계열의 머신러닝 알고리즘의
가장 기본이 되는 모형입니다.
GBM, XGBoost, LightGBM 등
트리 계열의 부스팅 알고리즘을
이해하기 위해서는 가장 기본이 되는
결정 트리 모형을 잘 이해해야 합니다.
이진 분류 예측에 활용되는 결정 트리를
사이킷런 패키진에 있는
DecisionTreeClassifier 함수에 대해서
알아보겠습니다.
DecisionTreeClassifier Parameter
DecisionTreeClassifier(*, criterion='gini', splitter='best', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, class_weight=None, ccp_alpha=0.0)
- criterion: {"gini", "entropy", "log_loss"}, default="gini"노드 분할의 품질을 측정하는 기능입니다.
지원되는 기준은 Gini 불순도에 대한 "gini"
Shannon information Gain에 대한
"log_loss" 및 "엔트로피"입니다. - splitter: {"best", "random"}, default="best"
각 노드에서 분할을 선택하는 데
사용되는 전략입니다.
"best" : 최상의 분할을 선택
"random" : 무작위 분할을 선택 - max_depth: int, default=None
트리의 최대 깊이입니다.
None이면 모든 leaf의 불순도가 0이거나
min_samples_split 샘플 미만이
포함될 때까지 노드가 확장됩니다. - min_samples_split: int or float, default=2
하위 노드를 분할하는 데 필요한 최소 샘플 수
- int이면 min_samples_split을
최소 숫자로 간주합니다.
- float이면 min_samples_split은 비율로
간주합니다. - min_samples_leaf: int or float, default=1
leaf 노드에 있어야 하는 최소 샘플 수
모든 깊이의 분할 지점은
왼쪽 및 오른쪽 분기 각각에
최소 min_samples_leaf 훈련 샘플이
남아 있는 경우에만 고려됩니다.
- int이면 min_samples_leaf를
최소 숫자로 간주합니다.
- float이면 min_samples_leaf는 비율로
간주합니다. - min_weight_fraction_leaf : float, default=0.0
leaf 노드에 있어야 하는
가중치 합계(모든 입력 샘플)의
최소 가중치 비율입니다.
sample_weight가 제공되지 않은 경우,
샘플은 동일한 가중치를 갖습니다. - max_features : int, float or {“auto”, “sqrt”, “log2”}, default=None
최상의 분할을 찾을 때 고려해야 할 feature 수
- int이면 각 분할에서 고려하는 max features 수
- float이면 max_features는 비율을 의미함
- auto이면 max_features = sqrt(n_features)
- sqrt이면 max_features=sqrt(n_features)
- log2이면 max_features=log2(n_features)
- None이면 max_features = n_features - random_state : int, RandomState instance or None, default=None
estimator의 randomness 제어 - max_leaf_nodes : int, default=None
leaf node의 최대 수 - min_impurity_decrease: float, default=0.0
노드 분할을 위한 최소 불순도 감소율 - class_weight: dict, list of dict or “balanced”, default=None
{class_label: weight} 형식의 클래스와
관련된 가중치입니다.
None이면 모든 클래스의 가중치는 1
multi class 문제의 경우
dictionary list는 y의 열과
동일한 순서로 제공될 수 있습니다.
다중 출력(다중 레이블 포함)의 경우
가중치는 모든 열의 각 클래스에 대해
정의되어야 합니다.
예를 들어 4개 클래스의
다중 레이블 분류 가중치는
[{0: 1, 1: 1}, {0: 1, 1: 5}, {0: 1, 1: 1}, {0: 1, 1: 1}]
대신 [{1:1}, {2:5}, {3:1}, {4:1}].
"balanced" 모드는 y 값을 사용하여
n_samples / (n_classes * np.bincount(y))로
입력 데이터의 클래스 빈도에
반비례하는 가중치를 자동으로 조정합니다.
multi class의 경우
y의 각 열의 가중치가 곱해집니다.
sample_weight가 지정된 경우
이러한 가중치에
sample_weight가 곱해집니다. - ccp_alpha: non-negative float, default=0.0
최소 비용-복잡성 가지치기에 사용되는
복잡도 매개변수입니다.
ccp_alpha보다 작은 비용 복잡도 중
가장 큰 하위 트리가 선택됩니다.
DecisionTreeClassifier Attributes
- classes_ : ndarray of shape (n_classes,) or list of ndarray
클래스 레이블(단일 출력 문제) 또는
클래스 레이블 배열 목록(다중 출력 문제). - max_features_ : int
max_features의 추론 값 - n_classes_ : int or list of int
클래스 수(단일 출력 문제의 경우) 또는
클래스 수를 포함하는 list(다중 출력 문제의 경우). - n_features_in_ : int
fitting 과정에서 표시되는 feature 수 - feature_names_in_ : ndarray of shape (n_features_in_,)
fitting 과정에서 표시되는 feature name.
X에 모두 문자열인 feature name이
있는 경우에만 정의됩니다. - n_outputs_ : int
fitting과정에서의 출력 수
DecisionTreeClassifier Method
Method | 설명 |
apply(X[, check_input]) | 각 샘플이 예측되는 잎의 인덱스 반환 |
cost_complexity_pruning_path(X, y[, ...]) | 최소 비용-복잡성 가지치기 동안 가지치기 경로 계산 |
decision_path(X[, check_input]) | 트리에서 결정 경로 반환 |
fit(X, y[, sample_weight, check_input]) | 훈련 세트(X, y)에서 의사결정 트리 분류기 작성 |
get_depth() | 의사 결정 트리의 깊이 반환 |
get_n_leaves() | 결정 트리의 leaf 수 반환 |
get_params([deep]) | 추정기에 대한 매개변수 반환 |
predict(X[, check_input]) | X에 대한 클래스 또는 회귀 값 예측 |
predict_log_proba(X) | 입력 샘플 X의 클래스 로그 확률 예측 |
predict_proba(X[, check_input]) | 입력 샘플 X의 클래스 확률 예측 |
score(X, y[, sample_weight]) | 주어진 테스트 데이터와 레이블의 평균 정확도 반환 |
set_params(**params) | 추정기의 매개변수 설정 |
다음 포스팅에서는 간단한
결정 트리 모형을 적합에 대해서
알아보겠습니다.
반응형
'Machine Learning' 카테고리의 다른 글
Confusion Matrix, Precision-Recall, F1-Score 이해하기 (0) | 2022.08.07 |
---|---|
앙상블 학습에 대한 설명과 기법에 대한 소개 (2) | 2022.07.23 |
Python 예제를 사용한 기계 학습의 정규화 및 표준화 (0) | 2022.06.13 |
Cross Validation(교차 검증) (0) | 2022.06.05 |
하이퍼파라미터 Serching (with 파이썬) - GridSearchCV() 함수 (0) | 2022.02.14 |
댓글