결정 트리
특정 변수에 대해 나무 가지가 뻗는 형태로 분류해 나감
분류와 회귀 모두 사용되는 지도학습 알고리즘
분석 과정이 직관적, 이해와 설명이 쉬움
스케일링, 정규화 등 전처리 영향도가 크지 않음
분석 과정을 실제 눈으로 확인 가능 -> 화이트박스 모델
의미있는 질문 중요
과적합으로 인한 모델 성능 저하 유의할 필요 있음
- 분류 알고리즘일 경우
시간에 따른 점수를 A, B, C 등급으로 분류할 경우
지니 불순도가 0일 경우 분류 완료, 아닐 경우 추가 분류
- 회귀 알고리즘일 경우
시간에 따라 등급이 분류되는 점수를 도출할 경우
MSE값을 기준으로 트리 노드 추가 생성
순도의 반대말
순도100%
불순도를 수치화할 수 있는 지표
지니 불순도 = 1 - (양성 클래스 비율² + 음성 클래스 비율²)
평가하는 지표
지니 불순도 특징
우리에게 필요한 정보는 어떤 속성이 얼마나 많은 정보를 제공하는가
Gain(T, X) = Entropy(T) - Entropy(T, X)
정보 이득이 크다 -> 어떤 속성으로 분할할 때 불순도가 줄어든다.
분할한 후 정보 이득 계산, 정보 이득이 가장 큰 속성부터 분할
학습 데이터에는 매우 잘 맞음, 하지만 평가 데이터에는 맞지 않음
-> 과대적합, 일반화 되지 못하는 현상
파라미터 | 설명 |
---|---|
max_depth | - 트리 최대 깊이(기본값: None) |
min_samples_split | - 노드를 분할하기 위한 최소한의 샘플 개수(기본값: 2) |
min_samples_leaf | - 리프 노드가 되기 위한 최소한의 샘플 수(기본값: 1) |
max_feature | - 최선의 분할을 위해 고려할 Feature 수(기본값: None) |
max_leat_node | - 리프 노드 최대 개수 |
from sklearn.tree import plot_tree
plt.figure(figsize=(30,20))
plot_tree(model,
filled=True,
feature_names=x.columns,
class_names=y.unique(),
fontsize=10)
plt.show()
plt.figure(figsize=(6, 8))
plt.barh(list(x), model.feature_importances_)
plt.ylabel("Features")
plt.xlabel("Importances")
plt.show()
확률 문제를 선형회귀로 모델링
학습을 통해 로지스틱 함수에 의해 반환되는 값을 확률로 간주하여 분류.
확률이 0과 1사이 값이 된다.
시그모이드(sigmoid) 함수라고도 함
확률 값 p 는 선형 판별식이 커지면 1, 작아지면 0에 가까운 값
결과로 (0, 1) 범위 확률 값을 얻게 됨
확률 값 0.5 기준으로 이진 분류 가능
분류와 회귀를 다양한 알고리즘으로 학습시킬 수 있다는 것을 알았다.
그럼 어떤 분류 알고리즘, 회귀 알고리즘이 해당 데이터에 최적의 알고리즘인지 궁금한 생각이 든다. 이 경우 테스트를 여러번 진행 후 정확도의 평균을 내는 방식으로 최적의 알고리즘을 찾는다고 하는데 내일 수업에서 알 수 있을 것 같다. 머신러닝 알고리즘이 수학과 관련되어 낯설고 어렵지만 실습을 통해 적용해볼 수 있으니 재밌는 것 같다.