Intro
의사결정나무
- 의사결정나무의 개념
- 지니계수
- 의사결정나무의 실습
앙상블과 랜덤포레스트
- 앙상블 모델
- 랜덤포레스트
- 랜덤포레스트 실습
의사결정나무
의사결정나무의 개념
- 의사결정나무(DecisionTree)는 지도학습의 일종으로 데이터에 있는 패턴을 찾아내고 조건을 통해 데이터를 분할하며 예측하는 모델
- 조건을 통해 데이터를 분리하여 데이터를 나눌 수 있는 기준이 확립되면 새로운 데이터가 들어왔을 때도 조건을 활용해 데이터를 예측할 수
▶ PetalWidth가 0.8보다 작거나 같지 않으면서,
▶ PetalWidth가 1.75보다 작거나 같지 않으면서,
▶ PetalLegnth가 4.85보다 작거나 같지 않은 데이터
▶ 조건이 충족된 데이터에 virginica가 많다면 모델은 앞으로 해당 조건을 가진 데이터를 virginica로 분류
의사결정나무의 용어
- 의사결정나무는 위치에 따라 뿌리마디, 자식마디, 부모마디, 끝마디, 중간마디로 구성
- 뿌리마디 : 나무구조가 시작되는 마디입니다. 예시에서 1번에 해당합니다. 모든 데이터를 담음
- 부모마디 : 자식마디를 가지고 있는 마디입니다. 즉, 1번 마디는 2,3번의 부모마디
- 자식마디 : 부모마디에서 갈라져 나온 마디입니다. 2,3번은 1번 마디의 자식마디
- 끝마디 : 각 나무줄기에서 마지막에 위치하는 마디입니다. 6,7,8,9 마디가 끝 마디. 끝 마디의 개수만큼 규칙이 생성
- 중간마디 : 뿌리 마디와 끝마디가 아닌 마디를 중간마디
- 깊이 : 뿌리마디를 제외하고 끝마디까지 연결된 마디의 개수를 의미. 위의 예시에서는 3의 깊이를 가짐
장점과 단점
장점
- 해석이 쉬움
- 특성의 중요성 비교가능
단점
- 모형이 복잡하면 성능이 떨어짐, 해석어려움
- 데이터 변형에 민감
지니계수
- 의사결정나무는 각 마디에서 조건으로 구분하며 뻗어나가는 형태
- 조건을 통해 데이터를 분리했을 때 순수도가 증가하고, 불순도가 감소하도록 조건을 설정
불순도와 순도
- 불순도(impurity)는 데이터에 서로 다른 카테고리의 데이터들이 얼마나 섞여있는지를 의미
- 순도(homogeneity)는 반대로 데이터가 얼마나 섞이지 않고 한가지 종류만 있는지를 의미
→ 따라서 지도학습일수밖에 없음
- 의사결정나무는 결과값이 같은 데이터끼리 잘 묶일 수 있도록 조건을 생성
지니계수
- 지니계수(Gini Index)는 불순도를 측정하는 지표
- 지니계수가 낮을수록 '불순도가 낮다' 즉, 비슷한 데이터들끼리 모여있다는 것을 의미
- 0~0.5의 값
- 분리된 노드의 지니계수가 낮을수록 해당 노드에는 잘 분류된 데이터가 있는 것
실습
import os
import pandas as pd
data = pd.read_csv('./Student_Performance.csv')
data.head()
# math, reading, writing 특성을 사용하여 preparation 특성을 예측하는 모델을 생성
from sklearn.tree import DecisionTreeClassifier
X = data[['math','reading','writing']]
y = data['preparation']
tree_model = DecisionTreeClassifier(max_depth =3)
tree_model.fit(X,y)
score = tree_model.score(X,y)
score
앙상블과 랜덤포레스트
앙상블 모델
- 하나의 복잡한 알고리즘보다 여러 개의 간단한 모델이 더 강력할 수 있다는 아이디어에서 만들어짐
- 앙상블 기법은 여러 개의 머신러닝 모델을 만들고 결합하여 정확한 결과를 추출
- 앙상블 기법의 유형으로는 대표적으로 보팅(Voting)과, 배깅(Bagging)
- 10 개 미만의 모델을 합침
보팅(좀더 전통적)
- 보팅을 위해서는 여러 종류의 다른 분류 모델을 사용
- 같은 데이터를 활용하여 여러 종류의 모델에 적용
- 보팅은 각각의 모델에 대한 산출된 결과 중에서 가장 많이 나온 결과를 채택
배깅(좀더 최근)
- 보팅이 각기 다른 모델을 선정하여 학습시켰다면 배깅(Bagging)은 하나의 모델을 다양하게 학습
- 전체 데이터에서 데이터를 추출하여 여러 개의 데이터 샘플을 생성
- 무작위(Random)으로 추출하고 추출한 데이터를 다시 뽑을 수 있는 복원추출을 사용
- 아래 그림에서 모델 1부터 모델 10까지는 사용하는 데이터만 다른 같은 알고리즘
- 배깅은 수행속도가 비교적 빠르고, 성능이 좋아서 많이 활용
- 랜덤포레스트(RandomForest)는 배깅과 의사결정 나무(Decision Tree) 모델을 사용하는 방법
- 랜덤포레스트 = 배깅 X 의사결정나무
랜덤포레스트
의사결정나무의 한계
- 학습 데이터를 기반으로 조건을 만들고 데이터를 분류, 새로운 데이터에 일반화하기 어려움
- 가진 데이터에만 잘 작동하는 모델 X, 새로운 데이터들에도 잘 작동하는 모델을 만들어야함
랜덤포레스트란?
- 의사결정나무 + 배깅
- 데이터 샘플을 여러개 만들어 각각의 나무에서 훈련을 시킨 후 결과를 투표 → 결과선택
랜덤포레스트의 장점과 단점
장점
- 의사결정나무의 한계점 보완
- 결측치에 강함
단점
- 계산에 많은 메모리가 필요, 속도가 상대적으로 느림
실습
from sklearn.ensemble import RandomForestClassifier
rf_model = RandomForestClassifier()
rf_model.fit(X,y)
score = rf_model.score(X,y)
score
'Statistics > ML | Python' 카테고리의 다른 글
wine 데이터 분석 (0) | 2023.02.20 |
---|---|
머신러닝이 뭐여 9탄 (feat. k-means 군집분석, 연관규칙분석, 신경망) (0) | 2023.02.18 |
머신러닝이 뭐야 7탄 (feat. 그래프 그리기, KNN) (0) | 2023.02.18 |
머신러닝이 뭐여 6탄 (feat. EDA !! ) (2) | 2023.02.18 |
머신러닝이 뭐여 5탄 (feat. 데이터 종류, 조건을 이용한 추출, 결측치, 이상치) (0) | 2023.02.18 |