티스토리 뷰

카테고리 없음

의사결정나무 이론

루돌푸다요 2024. 3. 29. 17:36

의사결정나무 (Decision Tree, DT) 

의사 결정 규칙을 나무 구조로 나타내어 전체 자료를 몇 개의 소집단으로 분류하거나 예측을 수행하는 분석 방법 입니다. 

  • 명칭 
    루트 노드 (Root Node) : 의사 결정나무의 시작점. 최초의 분할조건 
  • 리프노드 (Leaf Node) : 루트 노드로부터 파생된 중간 혹은 최종 노드 
  • 분류기준(Criteria) : Sex는 여성인 경우 0, 남성인 경우 1로 인코딩. 여성인 경우 좌측 노드로,남성인 경우 우측 노드로

  • 불순도(impurity)
    불순도 측정 방법 중 하나 인 지니 계수는 0과 1사이 값으로 0이 완벽한 순도(모든 샘플이 하나의 클래스), 
    1은 완전한 불순도(노드의 샘플의 균등하게 분포) 됨을 나타냄 
    리프 노드로 갈수록 불순도가 작아지는(한쪽으로 클래스가 분류가 잘되는)방향으로 나무가 자람

  • 샘플 : 해당 노드의 샘플 개수 
  • 값(value) : Y 변수에 대한 배열. 549명이 죽었고 (Y = 0), 342명이 살았음 (Y = 1)
  • 클래스 
    - 가장 많은 샘플을 차지하는 클래스를 표현 
    - 위에서는 주황색(Y = 0 다수), 파란색(Y=1다수)를 표현 

의사결정 나무 정리 

  • 장점 
    -쉽고 해석하기 용이 , 다중분류와 회귀에 모두 적용이 가능 
    - 이상치에 견고하며 데이터 스케일링이 불필요(데이터의 상대적인 순서를 고려해서) 
  • 단점 
    - 나무가 성장을 너무 많이하면 과대 적합의 오류에 빠질 수 있다. 
    - 훈련 데이터에 민감하여 반응하여 작은 변화에 노이즈에도 나무의 구조가 크게 달라짐 
       (불안정한)

  • python 라이브 러리 
    -sklearn.tree.DecisionTreeClassifier
    -sklearn.tree.Decision
X_features = ['Pclass', 'Sex', 'Age']

le = LabelEncoder()
titaninc_df['Sex'] = le.fit_transform(titaninc_df['Sex'])

le2 = LabelEncoder()
titaninc_df['Pclass'] =le2.fit_transform(titaninc_df['Pclass'])

age_mean = titaninc_df['Age'].mean()
titaninc_df['Age'] = titaninc_df['Age'].fillna(age_mean)

X = titaninc_df[X_features]
Y = titaninc_df['Survived']

model_dt = DecisionTreeClassifier(random_state=42)
model_dt.fit(X,y)

fit.fiure(figszie = (10,5))
plot_tree(model_dt, feature_names=X_features, class_names=['Not Survived', 'Survived'].filled = True)
plt_show()