해당 글은 코드잇 강의를 참고하여 작성되었습니다.
- 결정트리
- 예/아니오로 답할 수 있는 어떤 질문들이 있고, 그 질문들의 답을 따라가면서 데이터를 분류하는 알고리즘
- 모든 leaf 노드는 예/아니오
- 지니 불순도
- 데이터 셋의 데이터들이 얼마나 섞여있는지를 나타낸다.
- 지니 불순도가 작을수록 데이터 셋이 순수하고, 클수록 데이터 셋이 불순하다
- GI = 1−p(flu)2−p(not_flu)2
- 분류 노드 평가하기
- 좋은 노드는 최대한 많은 학습 데이터를 맞출 수 있어야 하므로 지니 불순도가 낮을 수록 좋다고 평가할 수 있다.
- 질문 노드 평가하기
- 나뉜 데이터들이 한가지로 명확하게 나뉘는 노드가 좋은 노드이다.
- 나뉜 노드들의 지니 불순도를 구한 뒤 데이터의 크기에 따라 가중치를 주어 평균을 내어 불순도를 구한다.
- 노드 고르기
- 나머지 질문들의 불순도를 계산하여 불순도가 가장 낮은 질문을 루트노드의 질문으로 선택한다.
- 노드 만들기
- 사용한 질문 아래로 내려온 데이터 셋을 기준으로 나머지 질문들에 대한 불순도를 계산해 다음 노드를 정해준다.
- 트리의 깊이를 지정하여 그 밑으로는 내려올 수 없게 하고 분류노드로 만든다.
- 이를 통해 원하는 깊이까지는 가장 지니 불순도가 낮은, 학습 데이터들을 가장 순수하게 나눠주는 질문, 또는 분류 노드를 고르면서 결정 트리를 만든다.
- 만약 속성이 숫자형인 질문노드가 있다면 해당 데이터를 정렬시켜 연속된 데이터의 평균을 구한 뒤 평균에 대한 지니 불순도를 계산해 가장 불순도가 낮은 질문노드를 선택한다.
- 속성 중요도
- 한 노드에서 데이터를 두 개로 나눴을 때, 데이터 수에 비례해서 불순도가 얼마나 줄어들었는지를 계산하여, 모든 노드가 데이터를 양 갈래로 나누면서 나누는 데이터 셋들의 지니 불순도를 낮추는데요. 전체적으로 낮춰진 불순도에서, 특정 속성 하나가 낮춘 불순도가 얼마나 되는지를 계산하는 것이다.
- 특정 속성을 질문으로 갖는 노드들의 중요도의 평균을 구한 거랑 비슷하여 이렇게 최종적으로 구한 값을 속성의 평균 지니 감소 (Mean Gini decrease)라고 부르기도 한다.
ex)
- scikit-learn으로 결정트리 사용하기
ex)
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
import pandas as pd
# 데이터 셋 불러 오기
cancer_data = load_breast_cancer()
X=pd.DataFrame(cancer_data.data, columns=cancer_data.feature_names)
y=pd.DataFrame(cancer_data.target, columns=['class'])
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=5)
y_train = y_train.values.ravel()
model=DecisionTreeClassifier(max_depth=5,random_state=42)
model.fit(X_train,y_train)
predictions=model.predict(X_test)
score=model.score(X_test,y_test)
# 출력 코드
predictions, score
'데이터 > 머신러닝' 카테고리의 다른 글
4.3 에다 부스트 (0) | 2021.07.26 |
---|---|
4.2 랜덤 포레스트 (0) | 2021.07.25 |
3.3 모델 평가와 하이퍼파라미터 고르기 (0) | 2021.07.24 |
3.2 정규화 (0) | 2021.07.24 |
3.1 데이터 전처리 (0) | 2021.07.23 |