[머신러닝] 6. 지도학습(분류): 의사결정나무

PurinYun·2023년 11월 23일
0

AIffel

목록 보기
23/75

의사결정 나무모델
• 지도학습 알고리즘 (분류, 회귀)
• 직관적인 알고리즘 (이해 쉬움)
• 과대적합되기 쉬운 알고리즘 (트리 깊이 제한 필요)
• 다수결의 법칙, 평균에 의해 예측하기 떄문에
이상치가 있을 경우 예측력이 떨어진다는 단점 존재

1. 라이브러리 및 데이터 불러오기

• 필요한 라이브러리를 가져오고, sklearn 라이브러리에 내장된 데이터를 불러옵니다

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 데이터 생성
from sklearn.datasets import load_breast_cancer

def make_dataset():
    iris = load_breast_cancer()
    df = pd.DataFrame(iris.data, columns=iris.feature_names)
    df['target'] = iris.target
    X_train, X_test, y_train, y_test = train_test_split(
        df.drop('target', axis=1), df['target'], test_size=0.5, random_state=1004)
    return X_train, X_test, y_train, y_test

X_train, X_test, y_train, y_test = make_dataset()
X_train.shape, X_test.shape, y_train.shape, y_test.shape

# 타겟 확인
y_train.value_counts()

2. 의사결정나무

• 지도학습(분류)에서 가장 유용하게 사용되고 있는 기법 중 하나입니다.
• 트리의 루트(root)에서 시작해서 정보이득이 최대가 되는 특성으로 데이터를 나눕니다.
• 정보이득(information gain)이 최대가 되는 특성을 나누는 기준
즉, 불순도를 측정하는 기준은 '지니'와 '엔트로피'가 사용됩니다.

데이터가 한 종류만 있다면 엔트로피/지니 불순도는 0에 가깝고,
서로 다른 데이터의 비율이 비슷하면 1에 가깝습니다.
정보이득(information gain)이 최대라는 것은 불순도를 최소화 하는 방향입니다.
(1-불순도)

# 의사결정나무
from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier(random_state=0)
model.fit(X_train, y_train)
pred = model.predict(X_test)
accuracy_score(y_test, pred)

3. 의사결정나무 하이퍼파라미터

<DesicionTreeClassifier 안에 들어있는 하이퍼파라미터 값>
• criterion (기본값 gini) : 불순도 지표 (또는 엔트로피 불순도 entropy)
• max_depth (기본값 None) : 최대 한도 깊이
• min_samples_split (기본값 2) : 자식 노드를 갖기 위한 최소한의 데이터 수
• min_samples_leaf (기본값 1) : 리프 노드가 되기 위한 최소 샘플 수

# 의사결정나무 하이퍼파라미터
from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier(
    criterion = 'entropy', 
    max_depth = 7, 
    min_samples_split = 2,
    min_samples_leaf=2, 
    random_state=0)
model.fit(X_train, y_train)
pred = model.predict(X_test)
accuracy_score(y_test, pred)
profile
Fantivation

0개의 댓글