의사결정나무 개념
* 의사결정나무
하나의 테스트에 대해 예/ 아니오로 구분
노드의 수가 작을수록 좋음
장점 : 수학을 잘 몰라도 ok => 쉬움
단점 : 트레이닝 데이터에 대한 정확도는 100%지만, 실제 테스트 데이터에 대한 정확도가 낮음 => 오버피팅
===> 단점을 보완하기 위해 나온 알고리즘 : 랜덤 포레스트
테스트 선정 순서 : 성능 좋은 테스트부터 우선 선정
- 실제 스코어링 방법
- 노드 별 엔트로피 측정
- 엔트로피 : 무질서 정도를 나타내는 측도 => 낮을수록 좋음
- 노드별 엔트로피를 측정 후 테스트 전체 퀄리티 측정
* 엔트로피
엔트로피는 낮을수록 좋다!!
* 피처가 연속형일 경우 : 모든 점이 테스트 후보 => 평균값으로 추정
==> 평균보다 작으면 '아니오', 크면 '예'
* 실습
import pandas as pd
df = pd.read_csv('../data/wine_data.csv')
features = ['Alcohol', 'Malic', 'Ash', 'Alcalinity', 'Magesium', 'Phenols',
'Flavanoids', 'Nonflavanoids', 'Proanthocyanins', 'Color', 'Hue',
'Dilution', 'Proline']
X = df[features]
y = df['class']
# 트레이닝/테스트 데이터 분할
from sklearn.model_selection import train_test_split
X_tn, X_te, y_tn, y_te = train_test_split(X, y, random_state=0)
# 데이터 표준화
from sklearn.preprocessing import StandardScaler
std_scale = StandardScaler()
std_scale.fit(X_tn)
X_tn_std = std_scale.transform(X_tn)
X_te_std = std_scale.transform(X_te)
# 의사결정나무 실습
from sklearn import tree
clf_tree = tree.DecisionTreeClassifier(random_state=0)
clf_tree.fit(X_tn_std, y_tn)
- 의사결정 나무 알고리즘은 sklearn.tree의 DecisionTreeClassification
# 예측
pred_tree = clf_tree.predict(X_te_std)
print(pred_tree)
## 결과값 ###
: [0 2 1 0 1 1 0 2 1 1 2 2 0 1 2 1 0 0 2 0 1 0 1 1 1 1 1 1 1 2 0 0 1 0 0 0 2
1 1 2 1 0 1 1 1]
# 정확도
from sklearn.metrics import accuracy_score
accuracy_t = accuracy_score(y_te, pred_tree)
print("accuracy:", accuracy_t)
# 정밀도
from sklearn.metrics import precision_score
precision_t = precision_score(y_te, pred_tree, average='macro')
print("precision:", precision_t)
# 리콜
from sklearn.metrics import recall_score
recall_t = recall_score(y_te, pred_tree, average='macro')
print("recall:", recall_t)
# F1 스코어
from sklearn.metrics import f1_score
f1_t = f1_score(y_te, pred_tree, average='macro')
print("f1:", f1_t)
## 결과값 ###
accuracy: 0.9333333333333333
precision: 0.9326599326599326
recall: 0.9424603174603176
f1: 0.9349141206870346
# confusion matrix 실습
from sklearn.metrics import confusion_matrix
conf_matrix_t = confusion_matrix(y_te, pred_tree)
print(conf_matrix_t)
### 결과값 ###
[[14 2 0]
[ 0 20 1]
[ 0 0 8]]
# 분류 레포트 확인
from sklearn.metrics import classification_report
class_report_t = classification_report(y_te, pred_tree)
print(class_report_t)
### 결과값 ###
precision recall f1-score support
0 1.00 0.88 0.93 16
1 0.91 0.95 0.93 21
2 0.89 1.00 0.94 8
accuracy 0.93 45
macro avg 0.93 0.94 0.93 45
weighted avg 0.94 0.93 0.93 45
'2023 빅리더 프로젝트 인턴십 > ML' 카테고리의 다른 글
[ML] day4 지도학습 - 로지스틱 회귀 분석 (0) | 2023.07.21 |
---|---|
[ML] day4 지도학습 - 나이브 베이즈 알고리즘( Naive Bayes ) (0) | 2023.07.21 |
[ML] day4 지도학습 - 회귀분석(Ridge, Lasso, ElasticNet) (0) | 2023.07.20 |
[ML] day3 지도학습 - KNN(K 최근접 이웃 알고리즘) (0) | 2023.07.20 |
[ML] day3 모형 평가 (0) | 2023.07.19 |
댓글