[DSOB/WIDA] DACON을 활용한 Classification 학습하기 (3)

2023. 4. 3. 22:15교내활동/소학회

현재 소학회에서 플젝(을 가장한 스터디)를 진행중이다.

전반적인 Classification model을 알아가는 과정으로서 작성한 글이다.

소학회 티스토리에 올렸던 글을 그대로 가져왔다.

https://dsob2021swu.tistory.com/95


Decision Tree

Hyper parameter

  1. criterion(기준) : default=”gini”, 데이터를 분류하기 위한 척도
    • “gini”
      • 지니계수를 기반으로 한 데이터 분류
    • “entropy”
      • 엔트로피 값을 기반으로 한 데이터 분류
    • “log_loss”
      • log_loss를 기반으로 한 데이터 분류
  2. splitter(분할) : default=”best”
    • “best”
      • 가장 좋은 분할 방식을 찾음
    • “random”
      • 가장 좋은 랜덤 분할 방식을 찾음
  3. max_depth : default=None
    • 트리구조의 최고 깊이를 설정해주는 파라미터
    • 최고 깊이를 지정해줌으로서 overfitting을 막을 수 있음
  4. min_samples_split : default=2
    • 내부 노드에서 샘플들을 분리하기 위한 최소 샘플 갯수
  5. min_samples_leaf : default=1
    • 최소 리프노드 개수
  6. min_weight_fraction_leaf : default=0.0
    • 뭘깝쇼?
  7. 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)
  8. random_state : default=None
    • 어떤 training dataset이 있다고 할 때, 이 dataset을 nn개로 분리한다고 치자. 이 nn개로 쪼개진 데이터 셋들은 각각 번호가 붙어있고, 그 번호에는 데이터 mm개가 들어있다. 몇번 데이터셋을 가져올 것인지 설정하는 것임
  9. max_leaf_nodes : default=None
    • leaf node의 최댓값을 결정해줌
  10. 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.
  11. class_weight : default=None
    • balanced
      • 균형있게 모든 클래스에 가중치를 줌
    • dict, list of dict
      • {class_label : weight} 의 형태로 각 클래스별로 가중치를 줌
  12. ccp_alpha : default=0.0
    • 최소비용 복잡도 pruning(가지치기라는 의미던데…흠?)에 사용되는 복잡도 파라미터

평가방법

  1. 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종 오류

출처