inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[개정판] 파이썬 머신러닝 완벽 가이드

시각화를 통한 결정 트리 모델의 구조 이해

feature importance

579

허귀석

작성한 질문수 20

2

DT에서 feature importance는 어떻게 결정되는지요? 강의에서는 importance를 확인하는 방법을 배웠는데, 이것이 어떻게 얻어진것인지 궁금합니다.

통계 python 머신러닝 배워볼래요?

답변 4

2

권 철민

올려주신 3개의 질문중 Decision Tree Node와 Feature Importance 모두 많은 설명이 필요하여 쉽게 설명드리는 정리에 시간이 소모될 것 같습니다.

최대한 신속하게 답변해 드릴터이니 잠시만 기다려 주시기 바랍니다.

1

허귀석

네, 감사합니다. 

0

허귀석

자세한 답변 다시 감사드립니다.

0

권 철민

사이킷런의 feature importance는 각 feature별로 개별 노드의 Gini importance를 합산하여 계수화 한 것입니다.

feature별 Gini importance는 각 feature들이 사용된 트리 노드에서의 지니계수와 해당 노드의 가중치가 부여된 데이터 건수를 곱한 값을 구한 뒤 이 노드의 자식 노드인 왼쪽과 오른쪽 노드 각각의 지니계수와 가중치 부여한 데이터 건수를 곱한것을 마이너스 하여 계산합니다.  

아래는 이를 Pseudo 코드로 만든 것입니다.

해당 자료는 https://towardsdatascience.com/the-mathematics-of-decision-trees-random-forest-and-feature-importance-in-scikit-learn-and-spark-f2861df67e3 를 참조하였고, Pseudo 코드는 사이킷런의 tree 소스 코드를 참조하였습니다. 


#해당노드가 마지막 노드가 아닐동안 루프 수행.
while node != end_node:
    # 만일 해당 노드가 리프노드가 아니면 해당 노드의 왼쪽 자식, 오른쪽 자식 노드를 구함
    if node.left_child != _TREE_LEAF:
        # ... and node.right_child != _TREE_LEAF:
        left = &nodes[node.left_child]
        right = &nodes[node.right_child]
       
        '''해당 노드가 특정 feature가 사용되었을 경우 지니계수(여기서는 impurity)와 해당 노드의 가중치가 부여된 데이터
        건수를 곱한 값에서 왼쪽과 오른쪽 노드 각각의 지니계수와 가중치 부여 데이터 건수를 곱한것을 마이너스한 값들을 해당          feature가  소속된 모든 노드에서 합산 적용 '''
        importance_data[node.feature] += (
            node.weighted_n_node_samples * node.impurity -
            left.weighted_n_node_samples * left.impurity -
            right.weighted_n_node_samples * right.impurity)
   

    #다음 노드로 이동.
    node += 1

# 루드 노드의 가중치 부여 데이터 건수로 나눔.
importance_data /= nodes[0].weighted_n_node_samples

모델 서빙과 관련된 강좌가 출시되는지 질문드립니다.

0

14

2

안녕하세요 열심히 수강중인 학생입니다

0

63

2

정수 인덱싱

0

68

2

넘파이 오류

0

85

2

11강 numpy의 axis 축 질문 드립니다.

0

85

2

Kaggle 에서 Santander customer satisfaction data 를 다운로드 되지가 않습니다.

0

79

2

Feature importances 를 보여주는 barplot 이 그래프로 안보여져요.

0

70

2

타이타닉 csv 파일이 주피터 화면에 보이지 않습니다.

0

75

2

타이타닉 csv 파일이 주피터 화면에 보이지 않습니다.

0

64

2

5강 강의 오류가 있어요.

0

84

1

실무에서 LTV 관련 모델 선택 질문입니다!

0

72

2

14강 강의 듣는중에 궁금한게 있어서 질문합니다~

0

69

3

파이썬 다운그레이 후 사이킷런 재설치

0

117

2

좋은 강의 감사합니다.

0

74

2

scoring 함수 음수값

0

67

2

6번 강의에 사이킷런, 파이썬, 아나콘다 각각 버전 일치 안 시키고 진행해도 강의 따라가 지나요?

0

100

2

분류 평가 정확도 예측

0

79

2

안녕하세요. 강의 들으면서 업무에 적용하고 싶은 수강생입니다.

0

99

1

카카오톡 채널 있나요

0

108

1

혹시 강의에서 사용하시는 ppt 받을 수 있는건가요

0

190

2

pca 스케일링 관련하여 질문드립니다.

0

100

2

주피터 대신 구글 코랩

0

172

2

강의에서 사용하는 pdf or ppt자료는 따로 없는 건가요?

0

148

2

실루엣 스코어..

0

86

2