[DSOB/WIDA] DACON을 활용한 Classification 학습하기 (3)
2023. 4. 3. 22:15ㆍ교내활동/소학회
반응형
현재 소학회에서 플젝(을 가장한 스터디)를 진행중이다.
전반적인 Classification model을 알아가는 과정으로서 작성한 글이다.
소학회 티스토리에 올렸던 글을 그대로 가져왔다.
https://dsob2021swu.tistory.com/95
Decision Tree
- 코드는 블럭으로 따로 첨부 X
- https://github.com/cAhyoung/dacon_stars_type_clf/blob/main/practive_code/dt_rf_practice.py
Hyper parameter
- criterion(기준) : default=”gini”, 데이터를 분류하기 위한 척도
- “gini”
- 지니계수를 기반으로 한 데이터 분류
- “entropy”
- 엔트로피 값을 기반으로 한 데이터 분류
- “log_loss”
- log_loss를 기반으로 한 데이터 분류
- “gini”
- splitter(분할) : default=”best”
- “best”
- 가장 좋은 분할 방식을 찾음
- “random”
- 가장 좋은 랜덤 분할 방식을 찾음
- “best”
- max_depth : default=None
- 트리구조의 최고 깊이를 설정해주는 파라미터
- 최고 깊이를 지정해줌으로서 overfitting을 막을 수 있음
- min_samples_split : default=2
- 내부 노드에서 샘플들을 분리하기 위한 최소 샘플 갯수
- min_samples_leaf : default=1
- 최소 리프노드 개수
- min_weight_fraction_leaf : default=0.0
- 뭘깝쇼?
- max_features : default=None
- best split을 찾을 때 고려할 피쳐의 수
- int, float형이 올 수 있으며, “auto”, “sqrt”, “log2”도 올 수 있음
- “auto” → 1.3버전부터 사라질 예정임
- max_features=sqrt(n_features)
- “sqrt”
- max_features=sqrt(n_features)
- “log2”
- max_features=log2(n_features)
- random_state : default=None
- 어떤 training dataset이 있다고 할 때, 이 dataset을 nn개로 분리한다고 치자. 이 nn개로 쪼개진 데이터 셋들은 각각 번호가 붙어있고, 그 번호에는 데이터 mm개가 들어있다. 몇번 데이터셋을 가져올 것인지 설정하는 것임
- max_leaf_nodes : default=None
- leaf node의 최댓값을 결정해줌
- min_impurity_decrease : default=0.0
- A node will be split if this split induces a decrease of the impurity greater than or equal to this value.
- class_weight : default=None
- balanced
- 균형있게 모든 클래스에 가중치를 줌
- dict, list of dict
- {class_label : weight} 의 형태로 각 클래스별로 가중치를 줌
- balanced
- ccp_alpha : default=0.0
- 최소비용 복잡도 pruning(가지치기라는 의미던데…흠?)에 사용되는 복잡도 파라미터
평가방법
- log loss
- y값을 맞춘 것을 기반으로 정확도를 측정하는 것이 아니라, 모델이 해당 정답을 맞출 확률을 반영하여 평가하는 것임
- 잘못 예측할수록 패널티를 부여 ← 잘못 분류된 수치적 손실값을 계산
- 확률이 높을 수록 로그값은 작게 나옴 → 로그값이 작을수록 좋은 지표임
from sklearn.metrics import log_loss # predict_proba 함수를 이용하여 X_test 데이터를 이용한 예측 확률을 구함 logloss_dt = log_loss(y_test, dt_clf.predict_proba(X_test)) print('log loss {0: .4f}'.format(logloss_dt))
- M은 클래스의 갯수
- y_i,m은 어떤 행 i가 클래스 m에 속한 것을 맞추었는가? 맞췄으면 1, 틀렸다면 0
- p_i,m은 어떤 행 i가 클래스 m에 속할 확률 값
2. Confusion Matrix
- 혼동행렬, 오차행렬이라고 부르며, 이진분류에서 많이 사용되는 성능지표임
예측클래스 (Negative) | 예측클래스 (Positive) | |
실제 클래스 (Negative) | True Negative | False Positive |
실제클래스 (Positive) | False Negative | True Positive |
- True Negative : Negative인 클래스를 맞춤
- False Positive : Negative인 클래스를 Positive로 예측 → 정답을 맞추지 못함
…
1) Accuracy(정확도)
(TN + TP) / (TN + FP + FN + TP)
- 예측 값과 실제 값이 모두 같은 경우 / 전체
- 클래스가 어느 한쪽으로 치우쳐져 있는 경우 정확도의 신뢰도는 떨어질 수 있음
- 한쪽으로 치우쳐져있는 클래스만 잘 맞추고 다른 한 클래스는 제대로 맞추지 못할 수 있음
2) Recall(재현율)
TP / (FN + TP)
- 실제 값이 positive인 대상 중 예측과 실제 값이 positive로 일치한 데이터의 비율
- FN + TP는 실제 값이 모두 Positive인 경우 (예측 결과 상관 X)
- 실제 데이터가 Positive이지만 Negative로 잘못 판단할 때 업무에 큰 영향이 있는 경우 Recall값을 중요하게 봄
- 제 1종 오류
3) Precision(정밀도)
TP / (FP + TP)
- 예측값이 positive인 것들 중 예측 성공한 경우의 비율
- FP + TP는 예측값이 positive 인 값들의 합
- 실제로는 negative값인 데이터를 positive로 판단하게되면 업무에 큰 영향이 있는 경우 precision을 중요하게 봄
- 제 2종 오류
출처
- https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html#sklearn.tree.DecisionTreeClassifier
- https://www.youtube.com/watch?v=i5U2inxzXx4
- https://leehah0908.tistory.com/23
- https://scikit-learn.org/stable/modules/generated/sklearn.metrics.log_loss.html#sklearn.metrics.log_loss
- https://white-joy.tistory.com/9?category=1015070
- 파이썬 머신러닝 완벽 가이드 1판 / 권철민
반응형
'교내활동 > 소학회' 카테고리의 다른 글
[DSOB/WIDA] DACON을 활용한 Classification 학습하기 (2) (0) | 2023.03.24 |
---|---|
[DSOB/WIDA] DACON을 활용한 Classification 학습하기 (1) (0) | 2023.03.16 |
미니프로젝트: 범죄 관련 주제로 (0) | 2021.12.28 |
K-MOOC 데이터로 배우는 통계학 13주차 (0) | 2021.11.16 |
K-MOOC 데이터로 배우는 통계학 10~12주차 (0) | 2021.11.14 |