[혼자 공부하는 머신러닝+딥러닝] 11강. 로지스틱 회귀로 와인 분류하기 & 결정 트리 - 와인 분류하기
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
https://velog.io/@simon919/%EA%B0%9C%EB%85%90%EB%B3%B4%EC%B6%A9-Regression-Trees
https://www.youtube.com/watch?v=g9c66TUylZ4
'데이터분석-머신러닝-AI > 강의 정리' 카테고리의 다른 글
[혼자 공부하는 머신러닝+딥러닝] 13강. 트리의 앙상블 - 다양한 앙상블 알고리즘 (1) | 2023.11.14 |
---|---|
[혼자 공부하는 머신러닝+딥러닝] 12강. 교차 검증과 그리드 서치 - (1) | 2023.11.13 |
[혼자 공부하는 머신러닝+딥러닝] 10강. 확률적 경사 하강법 알아보기 - 점진적 학습, 온라인 학습 (0) | 2023.11.11 |
[혼자 공부하는 머신러닝+딥러닝] 9강. 로지스틱 회귀 알아보기 - 분류모델 (2) | 2023.11.09 |
[혼자 공부하는 머신러닝+딥러닝] 8강. 특성 공학과 규제 알아보기 - 다중회귀 (1) | 2023.10.25 |
댓글