본문 바로가기

배우기/복습노트[Python과 분석]

[복습] Python | 분석 | 의사결정나무(Decision Tree) (1)+ 하루끝(20240124)

728x90
반응형

의사결정나무(Decision Tree, DT)는 트리기반 분류모델 중 하나이다.

잠시 분류모델에 대하여 정리해보자.

 

분류모델

  - tree: DT, RF, GBT, XGB, LightGBM(트리기반 모델로서 각광받고 있음). GBT까지는 old하고 그 이후로는 최근에 생긴 모델들이다.

  - regressor: linear regressor(선형회귀), (linear regressor 회귀계수를 제어하게 되면) Ridge, Lasso, (Ridge, Lasso 둘을 혼합하면) Elastic Net

  - SVM

  - logistic regressor

  - naive bayse(확률 기반 모델 설명할 때에는 나이브 베이즈 모델을 무시할 수 없음)

  - 거리기반: knn, k-means

 

 

 

본격적으로 의사결정나무로 들어가보자.

 

 

의사결정나무(Decision Tree)

  - 분류 모델 중 트리기반 모델의 가장 기본이 되는 모형

  - 유일하게 시각화가 가능

  - 장/단점

    장점: 모형이 간단하여 이해하기 쉬움

             변수 스케일의 영향을 받지 않음(스케일에 영향을 받는 모델은 거리기반모델. 회귀모형에서도 추정된 회귀 계수로 변수끼리 중요성을 결정할 수 있는데, 이런 결론을 내리려면 모든 변수들이 유의하다는 유의성 검정 결과가 통과되어야 하며, 변수가 똑같은 기준으로 해석되어야 한다. 즉 스케일링이 되어야 한다는 의이미다. 그러나 트리기반 모델은 불순도를 바탕으로 임계값을 구하기 때문에 변수의 스케일에 영향을 받지 않는다.)

             변수의 조합에 크게 영향을 받지 않음(feature selection 기능이 어느 정도 있기 때문이다. 선택받지 못한 변수가 있을 수밖에 없고, 이는 변수 제거의 효과를 가진다. 회귀모형이나 knn 에 비하여 변수의 조합에 영향을 받지 않는다.)

     단점: 비통계적 모델이므로 모델에 대한 통계적 유의성을 확인하기가 어려움(변수 자체의 유의성 검정 확인 불가. 회귀 모형은 모형에 대해서도 유의성 검정(F-test)을 하고, 회귀 계수에 대해서도 유의성 검정(t-test)를 한다). → accuracy 로 평가를 함(몇 개 중에 몇 개를 맞추었나, 정확도 확인). 파이썬에서는 score라고 부름.

             단 하나의 트리만을 가지고 결정을 하므로 쉽게 과대적합/과소적합 됨. 좋을 때 너무 좋은 결과를 가져오고 나쁠 때에는 너무 나쁜 현상이 발생한다는 것이다.

 

 

  - 초매개변수(hyper parameter): 인간이 제어 가능한 매개변수. 회귀계수는 우리가 직접 바꿀 수 없으므로 회귀계수는 그냥 파라미터라고 한다. 수정할 수 있는 파라미터는 hyper parameter. 

  1) 최대허용길이(max_depth): 트리의 크기를 제한할 목적으로 주로 사용. max_depth가 클 수록 복잡한 모델이 생성되면서 모델을 일반화하기 어려운 과적합 문제 발생

  2) 최소가지치기기준(min_samples_split): 특정 노드의 오분류 수가 최소가지치기기준보다 큰 경우는 추가 가지치기를 진행함. 따라서 min_samples_split이 클 수록 트리는 단순해짐. 값이 크다는 것은 split의 느슨한 기준을 가진다는 것이므로 트리가 단순해짐.  = 빠른 정지 규칙(early stopping).

  3) 임의성정도(max_features): 각 split마다의 고려하는 설명변수의 수. 이 값이 작을수록 서로 다른 트리가 구성됨 = 트리 간 상관관계 감소 → 서로 독립적인 트리가 구성됨

 

 

 

예제) iris data의 붖꽃의 품종 분류 모델 작성(Decision Tree)

1. 데이터 불러오기

 

사이킷런은 파이썬에서 가장 많이 사용하는 머신러닝 패키지이다.

사이킷런에서는 딕셔너리 형태로 자료를 제공한다.

 

key를 살펴보자.

data는 iris의 설명변수 자료,

target은 iris의 종속변수 자료,

target_names는 y의 실제 이름,

feature_names는 설명변수 설명

이 정도로 해석된다.

 

 

사이킷런은 모든 x 자료를 data에 넣고 y는 target에 넣는다. 그리고 위처럼 라벨인코딩까지 되어있다. 

 

y의 실제 이름이다.

 

설명변수 설명이다.

 

 

data는 array 이므로 키가 없기 때문에 설명변수를 feature_names에 저장한다.

 

 

 

2. EDA / 결측치 처리 / 이상치 처리 / 변수 선택 / 변수 가공 / 스케일링 ...

위 과정은 진행했다고 가정 후

전처리와 관련된 모든 도구들은 preprocessing이라는 하위 모듈에 있다.

dir로 전체 확인이 가능하다.

 

 

3. 모델링

1) 데이터 분리

 살펴보면 cross validation, train_test_split 등이 있다.

 

train_test_split(*arrays,              # 분리할 데이터 셋(여러 개 들어갈 수 있음)

                         test_size,           # 

                         train_size,          # 75:25 비율이 default

                         random_state)   # seed 값

 

 

x, y 각각의 train/test data로 4개의 집단으로 분류된다. 

데이터 형태를 보면 train_x, test_x, train_y, test_y 순으로 들어있다.

 

 

 

2) 학습

sklearn.tree를 살펴보면 DesicionTreeClassifier가 보인다.

 

DT를 import 한다.

 

 

모델을 만들고 모델을 학습한다. 한 건 한 건 학습하여 모델에 저장한다. 계속 반복해서 누르면 과적함되므로 주의.

 

위처럼 하면 모델의 호출가능한 정보를 볼 수 있다 / 모델의 정보 리스트

 

세 번째 변수가 압도적으로 높다.

 

 

3) 평가

모델의 과적합 여부를 확인하기 위하여 예측 점수를 확인해보았다.

100%가 나와서 과적합이 되었거나, 데이터가 단순하거나 둘 중 하나이다. 

 

test 데이터의 점수도 확인하였다.

728x90
반응형