Scikit Learn-의사 결정 트리
이 장에서는 의사 결정 트리라고하는 Sklearn의 학습 방법에 대해 알아 봅니다.
Decisions tress (DT)는 가장 강력한 비모수 적지도 학습 방법입니다. 분류 및 회귀 작업에 사용할 수 있습니다. DT의 주요 목표는 데이터 특성에서 추론 된 간단한 결정 규칙을 학습하여 목표 변수 값을 예측하는 모델을 만드는 것입니다. 의사 결정 트리에는 두 가지 주요 엔티티가 있습니다. 하나는 데이터가 분할되는 루트 노드이고 다른 하나는 최종 출력을 얻은 결정 노드 또는 잎입니다.
의사 결정 트리 알고리즘
다른 의사 결정 트리 알고리즘은 아래에 설명되어 있습니다.
ID3
이 알고리즘은 1986 년 Ross Quinlan에 의해 개발되었습니다. Iterative Dichotomiser 3이라고도합니다.이 알고리즘의 주요 목표는 모든 노드에 대해 범주 형 대상에 대해 가장 큰 정보 이득을 얻을 수있는 범주 형 기능을 찾는 것입니다.
트리를 최대 크기로 성장시킨 다음 보이지 않는 데이터에 대한 트리의 능력을 향상시키기 위해 가지 치기 단계를 적용합니다. 이 알고리즘의 출력은 다 방향 트리입니다.
C4.5
ID3의 후속 제품이며 연속 속성 값을 개별 간격 세트로 분할하는 개별 속성을 동적으로 정의합니다. 이것이 카테고리 기능의 제한을 제거한 이유입니다. 훈련 된 ID3 트리를 'IF-THEN'규칙 세트로 변환합니다.
이러한 규칙을 적용해야하는 순서를 결정하기 위해 각 규칙의 정확성을 먼저 평가합니다.
C5.0
C4.5와 유사하게 작동하지만 더 적은 메모리를 사용하고 더 작은 규칙 세트를 빌드합니다. C4.5보다 정확합니다.
카트
이를 분류 및 회귀 트리 알고리즘이라고합니다. 기본적으로 기능과 임계 값을 사용하여 이진 분할을 생성하여 각 노드에서 가장 큰 정보 이득 (Gini 인덱스라고 함)을 생성합니다.
동질성은 지니 지수에 의존하며, 지니 지수의 값이 높을수록 동질성이 높아집니다. C4.5 알고리즘과 비슷하지만 차이점은 규칙 집합을 계산하지 않고 숫자 대상 변수 (회귀)도 지원하지 않는다는 것입니다.
의사 결정 트리를 사용한 분류
이 경우 의사 결정 변수는 범주 형입니다.
Sklearn Module − Scikit-learn 라이브러리는 모듈 이름을 제공합니다. DecisionTreeClassifier 데이터 세트에 대한 다중 클래스 분류를 수행합니다.
매개 변수
다음 표는 sklearn.tree.DecisionTreeClassifier 모듈-
Sr. 아니요 | 매개 변수 및 설명 |
---|---|
1 | criterion − 문자열, 선택적 기본값 = "gini" 분할의 품질을 측정하는 기능을 나타냅니다. 지원되는 기준은 "gini"및 "entropy"입니다. 기본값은 지니 불순물을위한 지니이고 엔트로피는 정보 획득을위한 것입니다. |
2 | splitter − 문자열, 선택적 기본값 = "best" 각 노드에서 분할을 선택하기 위해 "최상의"또는 "무작위"중 어떤 전략을 모델에 알려줍니다. |
삼 | max_depth − int 또는 None, 선택 사항 default = None 이 매개 변수는 나무의 최대 깊이를 결정합니다. 기본값은 None입니다. 즉, 모든 잎이 순수 할 때까지 또는 모든 잎에 min_smaples_split 샘플 미만이 포함될 때까지 노드가 확장됩니다. |
4 | min_samples_split − int, float, 선택적 기본값 = 2 이 매개 변수는 내부 노드를 분할하는 데 필요한 최소 샘플 수를 제공합니다. |
5 | min_samples_leaf − int, float, 선택적 기본값 = 1 이 매개 변수는 리프 노드에 있어야하는 최소 샘플 수를 제공합니다. |
6 | min_weight_fraction_leaf − float, 선택적 기본값 = 0. 이 매개 변수를 사용하여 모델은 리프 노드에 있어야하는 가중치 합계의 최소 가중치를 얻습니다. |
7 | max_features − int, float, string 또는 None, 선택 사항 default = None 최상의 분할을 찾을 때 고려할 기능의 수를 모델에 제공합니다. |
8 | random_state − int, RandomState 인스턴스 또는 None, 선택 사항, 기본값 = 없음 이 매개 변수는 데이터를 섞는 동안 사용되는 생성 된 의사 난수의 시드를 나타냅니다. 다음은 옵션입니다-
|
9 | max_leaf_nodes − int 또는 None, 선택 사항 default = None 이 매개 변수는 최선의 방식으로 max_leaf_nodes로 트리를 성장시킬 수 있습니다. 기본값은 없음이며 이는 리프 노드의 수에 제한이 없음을 의미합니다. |
10 | min_impurity_decrease − float, 선택적 기본값 = 0. 이 분할이 다음보다 크거나 같은 불순물 감소를 유도하면 모델이 노드를 분할하므로이 값은 노드 분할 기준으로 작동합니다. min_impurity_decrease value. |
11 | min_impurity_split − 부동, 기본값 = 1e-7 이는 나무 성장의 조기 중지를위한 임계 값을 나타냅니다. |
12 | class_weight − dict, dict 목록, "균형"또는 없음, 기본값 = 없음 클래스와 관련된 가중치를 나타냅니다. 형식은 {class_label : weight}입니다. 기본 옵션을 사용하면 모든 클래스의 가중치가 1이어야 함을 의미합니다. 반면에 선택하면class_weight: balanced, 자동으로 가중치를 조정하기 위해 y 값을 사용합니다. |
13 | presort − bool, 선택 사항 기본값 = False 피팅에서 최상의 분할을 찾는 속도를 높이기 위해 데이터를 사전 정렬할지 여부를 모델에 알려줍니다. 기본값은 false이지만 true로 설정하면 학습 프로세스가 느려질 수 있습니다. |
속성
다음 표는 sklearn.tree.DecisionTreeClassifier 모듈-
Sr. 아니요 | 매개 변수 및 설명 |
---|---|
1 | feature_importances_ − 모양 배열 = [n_features] 이 속성은 기능 중요도를 반환합니다. |
2 | classes_: − 모양의 배열 = [n_classes] 또는 이러한 배열의 목록 클래스 레이블, 즉 단일 출력 문제 또는 클래스 레이블 배열 목록, 즉 다중 출력 문제를 나타냅니다. |
삼 | max_features_ − 정수 max_features 매개 변수의 추론 된 값을 나타냅니다. |
4 | n_classes_ − 정수 또는 목록 이것은 클래스의 수 (예 : 단일 출력 문제) 또는 모든 출력 (예 : 다중 출력 문제)에 대한 클래스 수 목록을 나타냅니다. |
5 | n_features_ − 정수 그것은 수를 준다 features fit () 메서드가 수행 될 때. |
6 | n_outputs_ − 정수 그것은 수를 준다 outputs fit () 메서드가 수행 될 때. |
행동 양식
다음 표는 sklearn.tree.DecisionTreeClassifier 모듈-
Sr. 아니요 | 매개 변수 및 설명 |
---|---|
1 | apply(self, X [, check_input]) 이 메서드는 리프의 인덱스를 반환합니다. |
2 | decision_path(self, X [, check_input]) 이름에서 알 수 있듯이이 메서드는 트리에서 결정 경로를 반환합니다. |
삼 | fit(self, X, y [, sample_weight,…]) fit () 메서드는 주어진 훈련 세트 (X, y)에서 결정 트리 분류기를 만듭니다. |
4 | get_depth(본인) 이름에서 알 수 있듯이이 메서드는 의사 결정 트리의 깊이를 반환합니다. |
5 | get_n_leaves(본인) 이름에서 알 수 있듯이이 메서드는 의사 결정 트리의 잎 수를 반환합니다. |
6 | get_params(self [, deep]) 이 방법을 사용하여 추정기에 대한 매개 변수를 얻을 수 있습니다. |
7 | predict(self, X [, check_input]) X의 클래스 값을 예측합니다. |
8 | predict_log_proba(자신, X) 우리가 제공 한 입력 샘플 X의 클래스 로그 확률을 예측합니다. |
9 | predict_proba(self, X [, check_input]) 우리가 제공 한 입력 샘플 X의 클래스 확률을 예측합니다. |
10 | score(자기, X, y [, 샘플 _ 가중치]) 이름에서 알 수 있듯이 score () 메서드는 주어진 테스트 데이터 및 레이블에 대한 평균 정확도를 반환합니다. |
11 | set_params(self, \ * \ * params) 이 방법으로 추정기의 매개 변수를 설정할 수 있습니다. |
구현 예
아래 Python 스크립트는 sklearn.tree.DecisionTreeClassifier 25 개의 샘플과 '높이'와 '모발의 길이'라는 두 가지 특징이있는 데이터 세트에서 남성 또는 여성을 예측하기위한 분류기를 구성하는 모듈-
from sklearn import tree
from sklearn.model_selection import train_test_split
X=[[165,19],[175,32],[136,35],[174,65],[141,28],[176,15]
,[131,32],[166,6],[128,32],[179,10],[136,34],[186,2],[12
6,25],[176,28],[112,38],[169,9],[171,36],[116,25],[196,2
5], [196,38], [126,40], [197,20], [150,25], [140,32],[136,35]]
Y=['Man','Woman','Woman','Man','Woman','Man','Woman','Ma
n','Woman','Man','Woman','Man','Woman','Woman','Woman','
Man','Woman','Woman','Man', 'Woman', 'Woman', 'Man', 'Man', 'Woman', 'Woman']
data_feature_names = ['height','length of hair']
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.3, random_state = 1)
DTclf = tree.DecisionTreeClassifier()
DTclf = clf.fit(X,Y)
prediction = DTclf.predict([[135,29]])
print(prediction)
산출
['Woman']
다음과 같이 파이썬 predict_proba () 메서드를 사용하여 각 클래스의 확률을 예측할 수도 있습니다.
예
prediction = DTclf.predict_proba([[135,29]])
print(prediction)
산출
[[0. 1.]]
의사 결정 트리를 사용한 회귀
이 경우 의사 결정 변수는 연속적입니다.
Sklearn Module − Scikit-learn 라이브러리는 모듈 이름을 제공합니다. DecisionTreeRegressor 회귀 문제에 대한 의사 결정 트리를 적용합니다.
매개 변수
사용 매개 변수 DecisionTreeRegressor 에서 사용 된 것과 거의 동일합니다. DecisionTreeClassifier기준 치수. 차이점은 '기준'매개 변수에 있습니다. 에 대한DecisionTreeRegressor 모듈 ‘criterion: 문자열, 선택적 기본값 = "mse" '매개 변수는 다음 값을 갖습니다.
mse− 평균 제곱 오차를 나타냅니다. 기능 선택 기준으로 분산 감소와 동일합니다. 각 터미널 노드의 평균을 사용하여 L2 손실을 최소화합니다.
freidman_mse − 또한 평균 제곱 오차를 사용하지만 Friedman의 개선 점수를 사용합니다.
mae− 평균 절대 오차를 나타냅니다. 각 터미널 노드의 중앙값을 사용하여 L1 손실을 최소화합니다.
또 다른 차이점은 ‘class_weight’ 매개 변수.
속성
의 속성 DecisionTreeRegressor 그것과 동일합니다 DecisionTreeClassifier기준 치수. 차이점은‘classes_’ 과 ‘n_classes_'속성.
행동 양식
방법 DecisionTreeRegressor 그것과 동일합니다 DecisionTreeClassifier기준 치수. 차이점은‘predict_log_proba()’ 과 ‘predict_proba()’'속성.
구현 예
의사 결정 트리 회귀 모델의 fit () 메서드는 y의 부동 소수점 값을 사용합니다. 사용하여 간단한 구현 예를 보겠습니다.Sklearn.tree.DecisionTreeRegressor −
from sklearn import tree
X = [[1, 1], [5, 5]]
y = [0.1, 1.5]
DTreg = tree.DecisionTreeRegressor()
DTreg = clf.fit(X, y)
적합하면이 회귀 모델을 사용하여 다음과 같이 예측할 수 있습니다.
DTreg.predict([[4, 5]])
산출
array([1.5])