명시적인 정답이 있는 데이터를 다룰 때에는 지도학습,
데이터의 피처와 레이블값(결정값, 클래스값)을 머신러닝 알고리즘으로 학습하는 것이 분류
=> "기존 데이터가 어떤 레이블에 속하는지!"
결정트리
Base. 직관적인 이해
-결정 트리(Decision Tree, 의사결정트리, 의사결정나무라고도 함)는 분류(Classification)와 회귀(Regression) 모두 가능한 지도 학습 모델
-스무고개 하듯, if/else구문처럼 예/아니오 질문을 이어가며 학습한다.
-다른 모델들과 다르게 결과를 시각적으로 읽기 쉬운 형태로 나타나는 것이 장정 => 대출을 원하는 사람이 신용평가를 하고 싶을 때(실질적으로 분류하는 경우에 자주 사용)
매, 펭귄, 돌고래, 곰을 구분한다고 생각해봅시다. 매와 펭귄은 날개를 있고, 돌고래와 곰은 날개가 없다. '날개가 있나요?'라는 질문을 통해 매, 펭귄 / 돌고래, 곰을 나눌 수 있습니다. 매와 펭귄은 '날 수 있나요?'라는 질문으로 나눌 수 있고, 돌고래와 곰은 '지느러미가 있나요?'라는 질문으로 나눌 수 있다![]() |
활용 예시
■ 분류: 범주형 레이블을 예측
- 은행 입장에서 대출을 요청하는 고객의 특성에 따라 대출 위험성을 분석하여 대출 여부를 결정한다.
- 고객 프로파일 및 구매 패턴을 분석하여 새로운 제품 구매 여부를 판단한다.
- 환자 특성과 상태에 따라 특정 처방의 적절성 여부를 예측한다.
■ 회귀: 목표변수의 평균값을 예측
- 다양한 신체 측정값을 기반으로 체질 비만도를 예측합니다.
- 주택가격에 영향을 주는 다양한 요인을 분석하여 주택 특성별 가격을 예측합니다.
- 고객 프로파일 및 구매 패턴에 따른 (특정) 제품 또는 매장의 매출액을 예측합니다.
=> 주로 분류 문제에서 더 자주 사용
트리 구조
이렇게 특정 기준(질문)에 따라 데이터를 구분하는 모델을 결정 트리 모델이라고 한다. 한번의 분기 때마다 변수 영역을 두 개로 구분한다.
결정 트리에서 질문이나 정답은 노드(Node)라고 부른다.
맨 처음 분류 기준을 Root Node라고 하고
중간 분류 기준을 Intermediate Node
맨 마지막 노드를 Terminal Node 혹은 Leaf Node라고 합니다.
균일한 데이터 세트
그렇다면 높은 예측 정확도를 가진 결정 나무를 만들려면 어떻게 해야 할까?
=>데이터를 분류할 때 최대한 많은 데이터 세트가 해당 분류에 속할 수 있도록 결정 노드의 규칙이 정해져야 한다. 트리를 최대한 균일한 데이터 세트를 구성할 수 있도록 분할(split)해야 한다
만약 위의 집합에서 아무거나 하나를 고르고 예측한다고 가정해보자. 두번째 집합에서는 데이터가 균일하기 때문에 랜덤하게 하나를 뽑아도 너구리라고 예측할 확률이 높다. 하지만 첫번째의 경우에는 혼잡도가 높기 때문에 데이터를 판단하기 쉽지 않다.
이와 같이 결정 노드는 정보 균일도가 높은 데이터 세트를 먼저 선택할 수 있도록 규칙 조건을 생성한다.
=>다시 말하자면, 정보 균일도가 높은 데이터 셋으로 나눠질 수 있도록 조건을 찾아 서브 데이터 셋을 생성하고, 생성한 자식 노드도 계속 반복적으로 정보 균일도가 높도록 조건을 찾는다. 이 과정을 통해 데이터 값을 예측하게 된다.
결정 노드의 분리기준
■ 지니 계수(Gini Index)
- 경제학에서 불평등 지수를 나타낼 때 주로 사용합니다.
- 불순도 측정 계수로 부모 노드의 지니 지수를 가장 많이 감소시키는 설명변수와 분리 값을 기준으로 자식노드를 형성합니다.
- 지니 계수가 낮을수록 데이터의 균일도는 높습니다. 따라서 지니 계수가 낮은 속성을 기준으로 분할합니다.
■ 엔트로피 계수(Entrophy Index)
- 엔트로피란 주어진 데이터 집합의 혼잡도를 의미합니다. 서로 다른 값이 섞여있으면 엔트로피가 높고, 같은 값들이 많으면 낮습니다.
- 혼잡도 측정지수로 부모 노드의 엔트로피 지수를 가장 많이 감소시키는 설명변수와 분리 값을 기준으로 자식 노드를 형성합니다.
- 분리에 필요한 기대 정보량으로 엔트로피가 낮을수록 균일도는 높습니다.
- 정보 이득 지수는 1에서 엔트로피 계수를 뺀 값입니다. 1-엔트로피 계수
- 결정 트리는 정보 이득 지수로 분할 기준을 결정하고 정보 이득이 높은 속성 기준으로 분할합니다.
결정트리 모델의 특징
'균일도'->룰이 명활하고 그에 기반해 분류되는 노드들, 그것을 시각화할 수도 있다. 따라서 쉽고 직관적이다.
but 과적합으로 정확도가 떨어진다.
장점_ 직관적이다: 결정 트리 모델 시각화
graphviz패키지를 이용해서!-> 다운받고 계속 오류 떠서 스트레스 받고 죽을 뻔 휴우
https://copycoding.tistory.com/348
https://2030bigdata.tistory.com/189
다운을 받았는데 graphviz가 c언어 용이라 파이썬 api로 경로랑 이것저것 변경해야 하나부다...
export_graphviz()는 Graphviz가 읽어들여서 그래프 형태로 시각화할 수 있게 해준다
톺아보기
gini: 다음의 value=[] 로 주어진 데이터 분포에서의 지니계수
samples: 현 규칙에 해당하는 데이터 건수
value=[]: 클래스 값 기반의 데이터 건수(이번 예제인 붓꽃의 경우 0: Setosa, 1 : Veericolor, 2: Virginia 를 나타냄. value=[1,2,3]이면 각각 1, 2, 3개)
class: value 리스트 내에 가장 많은 건수를 가진 결정값
색깔
-각 노드의 색은 붓곷 데이터의 레이블 값(주황생은 0:Setosa, 초록색은 1:Versicolor, 보라색은 2:Virginica)
-진할 수록 지니계수가 낮고 해당 데이터 레이블에 속하는 데이터가 많다는 것->균일화가 잘 되어 있다
최대 트리 깊이 제어하기(max_depth)
max_depth=3으로
min_samples_split=4로
자식 노드로 분할하려면 최소한 샘플의 수가 4개는 필요한데, 3개밖에 없으므로 더이삭 규칙 노드를 위한 분할을 하지 않고 그냥 리프 노드로 놔둠(트리 깊이도 줄고 더 간결한 결정 트리가 만들어짐)
장점_직관적이다: 결정 트리의 Feature의 속성
feature_importance를 통해 피처별로 중요도 값을 매핑하여 중요도를 알게되면 알고리즘이 어떻게 동작하는지 직관적으로 이해할 수 있다
단점_과적합(Overfitting)
=>Decision Tree의 과적합을 줄이기 위한 파라미터 튜닝
(1) max_depth 를 줄여서 트리의 깊이 제한
(2) min_samples_split 를 높여서 데이터가 분할하는데 필요한 샘플 데이터의 수를 높이기
(3) min_samples_leaf 를 높여서 말단 노드가 되는데 필요한 샘플 데이터의 수를 높이기
(4) max_features를 높여서 분할을 하는데 고려하는 feature의 수 제한
'cs,코딩,알고리즘 > <파이썬 머신러닝 완벽 가이드>스터디' 카테고리의 다른 글
사이킷런 Linear Regression_보스턴 주택 가격 예측 (0) | 2021.11.15 |
---|---|
분류 머신러닝 알고리즘(SMOTE, LightGBM을 이용)_신용사기검출 (0) | 2021.11.09 |
지도학습 분류 모델 평가지표 (0) | 2021.09.27 |
피마 인디언 당뇨병 예측 (0) | 2021.09.25 |
2. 사이킷런-붓꽃 품종 분류하기 (0) | 2021.09.20 |