데이터분석-머신러닝-AI/강의 정리

[혼자 공부하는 머신러닝+딥러닝] 11강. 로지스틱 회귀로 와인 분류하기 & 결정 트리 - 와인 분류하기

bluebamus 2023. 11. 12.

https://www.youtube.com/watch?v=tOzxDGp8rsg&list=PLJN246lAkhQjoU0C4v8FgtbjOIXxSs_4Q&index=13

 

 - 결정트리

   - 현 상황에서 두 조건을 두고 참과 거짓 혹은 예와 아니오의 구분으로 예측값을 구분해 나간다.

   - 결정트리 모델은, 부모노드와 자식노드의 불순도 차이가 크도록 노드를 나눈다.

      - 이 차이를 '정보 이득'이라고 부르며, 노드를 순수하게 나눌수록 정보 이득이 커진다.

   - 장점으로 스케일을 조정하지 않은 특성(전처리 없이)을 그대로 사용할 수 있다는 것이다.

   - 결정트리는 feature_importances_ 를 통해 훈련세트로 부터 학습한 값을 출력해 준다.

      - 각 특성들의 값을 확인해 어떤 특성이 더 중요하게 사용되는지 확안할 수 있다.

   - 너무 깊이 만들면 과대적합 될 수 있다.

 

 - DecisionTreeClassifier 

   - classifier(분류)라는 이름이 있다면 regressor(회귀)도 있다고 생각하자.

from sklearn.tree import DecisionTreeClassifier

 

 - 현재 강의에 사용된 데이터를 사용할 경우 

   - LogisticRegression : 0.78 / 0.77 의 훈련과 테스트의 score가 확인되었다.

   - DecisionTreeClassifier : 0.99 / 0.85 의 훈련과 테스트의 score가 확인되었다.

   - DecisionTreeClassifier가 성능이 더 좋다는 것을 확인할 수 있다.

 

 - tree 형식의 그래프 만들기

import matplotlib.pyplot as plt
from sklearn.tree import plot_tree

plt.figure(figsize=(10,7))
plot_tree(dt)
plt.show()

 

 - 루트노드에서 마지막 리프 노드에 있는 예측 값이 새로운 샘플 x에 대한 예측값이 된다.

 - 분류일 경우, 마지막 리프 노드에 들어 있는 샘플 중에 다수의 클래스가 예측 클래스가 된다.

 - 회귀일 경우, 마지막 리프 노드에 들어 있는 타겟값의 평균이 x에 대한 예측 값이 된다.


 - DecisionTree에는 maxfeatures 매개변수가 있다.

   - 사용할 특성의 갯수를 지정할 수 있다.  기본 값은 None, 모든 특성을 사용한다.

   - 값을 지정하게 되면, 정해진 특성 갯수만큼 랜덤하게 선택하여 사용한다.

 

 - 지니(gini) 불순도

   - 사이킷런의 DecisionTreeClassifier의 매개변수 중 하나가 criterion이 있다. 이 변수는 노드를 분할하는 기준을 정하는 값으로 기본 값이 'gini'이다.

   - 계산방법 : 1- (음성 클래스 비율^2 + 양성 클래스 비율^2)

   - 부모의 지니 불순도와 자식의 불순도를 뺐을 때 그 차이가 가장 크게 나오는 방향으로 노드를 분할한다.

   - 음성 클래스가 높을수록 값이 높아지고, 0.5는 음성클래스와 양성 클래스 비율이 같기 때문에 불순도가 가장 높다고 할 수 있다. 양성클래스가 100%인 경우 순수노드라 하며 불순도가 없기 때문에 0이 된다.

      - 불순도가 0.5인 경우 : 두 클래스가 정확히 반반으로 나눠져서 구분의 의미가 없는 최악의 노드

   - 사용자의 설정이 없다면, 기본적으로 왼쪽 끝에 있는 노드가 100% 순수노드로만 이루어질때까지 노드를 계속 분할해 나간다.

   - 부모 노드와 자식노드간의 불순도 차이 계산 방법

      - 부모의 불순도 − (왼쪽노드 샘플 수/부모노드 샘플 수)×왼쪽노드 불순도−(오른쪽노드 샘플 수/부모노드 샘플 수)×오른쪽노드 불순도 = ′ 정보이득 ′

   - 보통 기본값인 '지니 불순도'를 더 많이 쓰는데, '엔트로피 불순도'로 만든 결과와 크게 차이나지는 않는다.

 

 - max_depth 

   - 최대 확장되는 가지의 depth를 제한한다.

 

- 사용 가능한 매개변수

   - criterion : 분할 품질을 측정하는 기능 (default : gini)
   -  splitter : 각 노드에서 분할을 선택하는 데 사용되는 전략 (default : best)
   -  max_depth : 트리의 최대 깊이 (값이 클수록 모델의 복잡도가 올라간다.)
   -  min_samples_split : 자식 노드를 분할하는데 필요한 최소 샘플 수 (default : 2)
   -  min_samples_leaf : 리프 노드에 있어야 할 최소 샘플 수 (default : 1)
   -  min_weight_fraction_leaf : min_sample_leaf와 같지만 가중치가 부여된 샘플 수에서의 비율
   -  max_features : 각 노드에서 분할에 사용할 특징의 최대 수
   -  random_state : 난수 seed 설정
   -  max_leaf_nodes : 리프 노드의 최대수
   -  min_impurity_decrease : 최소 불순도
   -  min_impurity_split : 나무 성장을 멈추기 위한 임계치
   -  class_weight : 클래스 가중치
   -  presort : 데이터 정렬 필요 여부

 

 

 - reference : 

https://eunhye-zz.tistory.com/25

 

[혼자공부하는머신러닝+딥러닝] 5. 트리 알고리즘

아래 내용은 "혼자 공부하는 머신러닝+딥러닝" 을 공부하며 간략하게 정리한 내용입니다. 쉬운 사례로 어려운 수식 없이 설명하므로 입문자에게 강추하는 책입니다! 1. 시작하기 전에 한빛 마켓

eunhye-zz.tistory.com

https://velog.io/@simon919/%ED%98%BC%EA%B3%B5%EB%A8%B8%EC%8B%A0-5-1.-%EA%B2%B0%EC%A0%95-%ED%8A%B8%EB%A6%AC-bbyd1i7u

 

[혼공머신] 5-1. 결정 트리

김 팀장🗣️ "레드와인인지 화이트와인인지 표시가 누락됐어.. 캔에 인쇄된 알코올 도수, 당도, pH 값으로 와인 종류를 구별할 수 있겠어?"

velog.io

https://velog.io/@simon919/%EA%B0%9C%EB%85%90%EB%B3%B4%EC%B6%A9-Regression-Trees

 

[개념보충] Regression Trees

2023.02.27

velog.io

https://www.youtube.com/watch?v=g9c66TUylZ4

 

댓글