학습 목표
- 모델을 시각화하여 분석하고, feature 중에서 모델에 영향을 미친 정도를 확인할 수 있습니다.
- 정확도를 계산하는 방법을 이해합니다.
핵심 키워드
- plot_tree
- feature_importances
- accuracy_score
학습하기
학습 목표
- 모델을 시각화하여 분석하고, feature 중에서 모델에 영향을 미친 정도를 확인할 수 있습니다.
- 정확도를 계산하는 방법을 이해합니다.
핵심 키워드
- plot_tree
- feature_importances
- accuracy_score
학습하기
학습내용
트리 알고리즘 분석하기
from sklearn.tree import plot_tree
plot_tree(model, feature_names=feature_names)
tree를 시각화해보겠습니다.
결과 :
from sklearn.tree import plot_tree
plt.figure(figsize=(20, 20))
tree = plot_tree(model, feature_names=feature_names,
filled=True,
fontsize=10)
시각화를 해보면 글루코스, BMI 등으로 tree의 가지가 나눠지기 시작한다는 것을 알 수 있습니다.
밑으로 내려갈수록 샘플의 수가 작아집니다.
결과 :
graphviz를 설치했다면 똑같이 그려볼 수 있습니다.
import graphviz
from sklearn.tree import export_graphviz
dot_tree = export_graphviz(model, feature_names = feature_names,
filled=True)
graphviz.Source(dot_tree)
그래프를 더 크게 볼 수 있습니다.
오버피팅을 방지하기 위해 가지 개수를 제한하기도 합니다.
model.feature_importances_
우리가 넣은 column 순서대로 feature의 중요도를 볼 수 있습니다.
결과 :
sns.barplot(x=model.feature_importances_, y=feature_names)
seaborn으로 중요도 수치를 그려보겠습니다.
결과 :
정확도 예측하기
diff_count = abs(y_test - y_predict).sum()
diff_count
실제 정답과 예측한 정답의 차를 합하여 diff_count 변수에 넣습니다.
전체 중에서 44개가 정답과 다릅니다.
모델의 옵션에서 다양한 값들이 랜덤하게 들어가므로 수치가 다를 수 있습니다.
결과 :
44
abs(y_test - y_predict).sum() / len(y_test)
전체에서 28%를 틀렸음을 알 수 있습니다.
결과 :
0.285714285714
(len(y_test) - diff_count) / len(y_test) * 100
71%의 예측도를 보입니다.
결과 :
71.42857142857143
from sklearn.metrics import accuracy_score
accuracy_score(y_test, y_predict)
model.score(X_test, y_test) * 100
사이킷런에 있는 accuracy 메트릭을 사용할 수 있고, 모델에 탑재된 score 함수도 사용하여 정확도를 구할 수 있습니다.
결과 :
71.42857142857143
https://colab.research.google.com