1. 분류란?
- 주어진 입력 값이 어떤 클래스에 속할지에 대한 결과값을 도출하는 알고리즘
- 다양한 분류 알고리즘이 존재
- 예측 목표와 데이터 유형에 따라 적용됨
- 분류 문제에는 다양한 머신러닝 모델을 사용하여 해결(트리구조, 확률모델, 결정 경계 등)
2. 의사결정나무(Decision Tree)
- 스무고개와 같이 특정 질문들을 통해 정답을 찾아가는 모델
- 결과가 직관적이며, 해석하기 용이
- 학습이 끝난 트리의 작업 속도가 매우 빠름
- 최상단의 뿌리마디(Root Node)에서 마지막 끝 마디(Terminal Node)까지 아래 방향으로 진행
- 중간 마디(Internal node)를 통해 분리 기준을 더 추가할 수 있음
- 분리 기준은 데이터의 불순도(impurity)를 최소화하는 구역으로 나눔
- 불순도란, 다른 데이터가 섞여 있는 정도
- 불순도 측정은 지니 불순도(Gini Impurity)와 엔트로피(entropy)가 있음
- 지니 계수(Gini index)란, 해당 구역 안에서 특정 클래스에 속하는 데이터의 비율을 모두 제외한 값으로, 다양성을 계산하는 방법임 $$ Gini Index = 1 - (yes의 확률)^2 - (no의 확률)^2 $$
- 지니 불순도 $$ Gini Impurity = \frac{n_1}{N}Gini_1 + \frac{n_2}{N}Gini_2 $$
- \(n_i\) : \(i\)번째 자식 마디의 데이터 개수
- \(N\) : 부모 마디의 데이터 개수
from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier()
model.fit(train_X, train_Y)
# 예측하기
pred_X = model.predict(test_X)
의사결정나무 깊이의 trade-off
- 의사결정나무의 깊이가 깊어질수록 세분화해서 나눌 수 있음
- 하지만 너무 깊은 모델은 과적합(Overfitting)을 야기할 수 있음
- 데이터에 따라 다를 수 있지만 너무 깊은 모델은 지양
3. 분류 평가 지표
3.1. 혼동 행렬(Confusion Matrix)
예측 | |||
Positive | Negative | ||
실제 | Positive | True Positive(TP) | False Negative(FN) |
Negative | False Positive(FP) | True Negative(TN) |
- True Positive(TP) : 실제 Postivie인 값을 Postivie라고 예측 = 정답
- True Negative(TN) : 실제 Negative인 값을 Negative라고 예측 = 정답
- False Positive(FP) : 실제 Negative인 값을 Positive라고 예측 = 오답; 1형 오류
- False Negative(FN) : 실제 Positive인 값을 Negative라고 예측 = 오답; 2형 오류
from sklearn.metrics import confusion_matrix
y_pred = model.predict(test_X)
cm = confusion_matrix(y_test, y_pred)
3.2. 정확도(Accuracy)
$$ Accuracy = \frac{TP+TN}{P+N} = \frac{TP+TN}{(TP+FN) + (TN +FP)} $$
- \( P: TP + FN, N: TN + FP \)
- 전체 데이터 중에서 제대로 분류된 데이터의 비율
- 모델이 얼마나 정확하게 분류했는지 나타내며, 일반적으로 분류 모델의 주요 평가 방법으로 사용
- 클래스 비율이 불균형 할 경우, 평가 지표의 신뢰성을 잃을 가능성이 있음
from sklearn.metrics import accuracy_score
y_pred_train = model.predict(x_train)
y_pred_test = model.predict(x_test)
acc_train = accuracy_score(y_train, y_pred_train)
3.3. 정밀도(Precision)
$$ Precision = \frac{TP}{TP+FP} $$
- 모델이 Positive라고 분류한 데이터 중에서 실제로 Positive인 데이터의 비율
- 즉, 실제로 Negative인 데이터를 Positive라고 판단하면 안되는 경우 사용되는 지표(Negative가 중요한 이유)
from sklearn.metrics import precision_score
precision_score(train_Y, y_pred_train)
3.4. 재현율(Recall, TPR)
$$ Recall= \frac{TP}{TP+FN} = \frac{TP}{P} $$
- 실제로 Positive인 데이터 중에서 모델이 Positive로 분류한 데이터의 비율
- 즉, 실제로 Positive인 데이터를 Negative라고 판단하면 안되는 경우 사용되는 지표(Positive가 중요한 이유)
from sklearn.metrics import recall_score
recall_score(train_Y, y_pred_train)
- 분류 결과를 전체적으로 보고 싶다 : 혼동 행렬(Confusion Matrix)
- 정답을 얼마나 잘 맞췄는지 보고 싶다 : 정확도(Accuracy)
- FP 또는 FN의 중요도가 높다 : 정밀도(Precision), 재현율(Recall)
'데이터 사이언스 > 머신러닝' 카테고리의 다른 글
[NIPA AI 교육/응용] 06. 텐서플로우와 신경망 (0) | 2021.09.12 |
---|---|
[NIPA AI 교육/응용] 05. 퍼셉트론 (0) | 2021.09.05 |
[NIPA AI 교육/응용] 03. 회귀 분석 알고리즘 (0) | 2021.08.26 |
[NIPA AI 교육/응용] 02. 자료 형태의 이해 (0) | 2021.08.25 |
[NIPA AI 교육/응용] 01. 자료 형태의 이해 (0) | 2021.08.25 |