Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

Altiora Petamus

[EXPLORATION] 2-1. scikit-learn Model / Confusion Matrix 본문

SSAC X AIffel/EXPLORATION_SSAC

[EXPLORATION] 2-1. scikit-learn Model / Confusion Matrix

현석종 2021. 2. 19. 16:15

이전 포스트 ( 2. [EXPLORATION] 2. scikit-learn 내장 분류 모델 학습 ) 에서 scikit learn의 데이터셋과 모델을 이용한 간단한 분류 모델을 학습시켜보았다. 이번 포스트에서는 scikit learn의 모델들과 오차행렬에 대하여 기록하고자 한다.

 


1. Model 

1-1)  Decission Tree 

출처: ratsgo님 블로그 

  • 데이터의 패턴을 분석하여 예측 가능한 패턴들의 조합으로 나타내며 그 형상이 나무와 같아 붙여진 이름 
  • 데이터를 이용한 '스무고개'
  • 분류 / 회귀 모두 예측 가능
      - 분류의 경우 데이터와 해당 label을 참고하여 terminal node에 가장 빈도가 높은 범주에 데이터 분류
      - 회귀의 경우 해당 terminal node의 종속변수값의 평균을 예측값으로 반환하지만 그 종류는 terminal node의 갯수와 일치 
  • 각각의 terminal node의 데이터는 '분할'되어있고, 해당 노드의 대표값( 분류 = 최빈값, 회귀 = 평균 )을 반환 
  • 순도(homogeneity)의 증가, 불순도(impurity)의 감소하는 방향으로 영역을 나눔 (이러한 과정을 '정보흭득' 이라 함)
  • 대표적인 지표로 엔트로피가 있다. 

 

       m개의 데이터가 속하는 영역 A에 대한 엔트로피를 정의하는 식

       (Pk는 A영역 속에서 k범주에 속하는 데이터 비율)

       위 식을 기준으로 데이터를 나누며 데이터 각각의 종류별로 가장 정보획득이 가장 큰 방향으로 나아가며 데이터 영역 분리

  • 가지치기를 하여 과적합을 방지한다.
    모든 termonal node의 순도가 1인 상태 (entropy =0)를 full tree라 하는데 이 상태는 입력된 data에 과적합된 상태이다. 따라서 적당한 선에서 tree의 분기를 제한하여 과적합을 방지한다. 

참고 블로그 -> ratsgo.github.io/machine%20learning/2017/03/26/tree/ (출처)

 

 

 

 

 

1-2) Random Forest

  • decision tree에서 수직적으로 데이터를 분리하는 방식이 특정한 데이터에만 유용하다는 단점이 있는데 그것을 보완한 모델 
  • 다수의 decision tree모델의 결과를 통합하여 리턴 (앙상블-Ensenble method: 결과를 통합하거나 합치는 방식) 
  • Random의 뜻은 decision tree를 만들때, 쓰이는 요소(고려하는 요소)를 무작위로 선정한다는 것.
  • 무작위로 만들어진 decision tree중 가장 정확한 예측을 한 tree의 요소가 통합된 tree의 한가지 요소가 된다. 

참고 블로그 -> medium.com/@deepvalidation/title-3b0e263605de (출처)

 

 

 

 

 

 

1-3) SVM ( Supprot Vector Machine )

  • data를 비선형 매핑을 통해 고차원 상에서 찾은 초평면( hyperplane)으로 분리한다. 
    2차원에서 데이터를 분리하는 것은 선이고 3차원에서 데이터를 분리하는 것은 면이다. 그 이상의 차원에서는 초평면이라고 한다. 
  • MMH(Maximum Marginal Hyperplane,최대 마진 초평면 )을 찾아 분리하는 방법 

출처: https://excelsior-cjh.tistory.com/66?category=918734

  • 훈련 데이터에 대한 학습이 완벽하게 이루어 지지 않아도( 데이터를 완벽하게 분리하지 않아도) 최대 마진을 갖는 초평면(w)을 찾는다면 새로운 데이터가 들어오더라도 에러가 발생할 가능성이 적다. 

참고 블로그-> excelsior-cjh.tistory.com/66?category=918734 

                      m.blog.naver.com/PostView.nhn?blogId=laonple&logNo=220845107089&proxyReferer=https:%2F%2Fwww.google.com%2F(출처)

 

 

 

 

 

1-4) SGD Classifier (Stochastic Gradient Descent Classifier ,확률적 경사 하강법)

출처 : https://wikidocs.net/36033

  • 경사 하강법 - LOSS를 최소화하는 가중치값을 찾아가는 반복적 방법
    - 일반적인 경사 하강법은 노이즈가 적가나 임의의 방식으로 최소값을 얻는데 유용하다는 장점이 있지만 '일괄 처리'로 인해 data set의 크기가 커질 경우 각 반복에 대해 참고해야 하는 데이터가 많아지므로 부담이 커진다.(시간이 오래 걸림) 

  • 전체 데이터에서 임의로 선택된 하나의 데이터만을 참고하여(batch = 1) 경사하강법을 적용하는 방법-SGD 
  • 변경폭이 불안정 하고 , 일반적인 경사하강법보다 정확도가 낮은 경우가 있다. 
  • 일반적인 경사하강법과 비교했을 때, 속도가 빠르다.
  • 하지만 노이즈가 많이 발생하고 반복이 많이 필요하다는 단점이 있다. 
  • 그 외 경사 하강법 -> 배치 경사 하강법, 미니 배치 경사 하강법 

참고 블로그 -> wikidocs.net/36033(출처)

 

 

 

 

 

 

1-5) Logisic Regression

 

  • 로지스틱 회귀 분석은 이진 분류를 수행하는 데 사용됨 
  • 각 속성들의 계수 log-odds를 구한 후 sigmoid함수를 적용하여 실제로 데이터가 해당 클래스에 속할 확률을 0과 1사이의 값으로 나타냄 

참고 블로그 -> wikidocs.net/36033hleecaster.com/ml-logistic-regression-concept/(출처)

 

 

 


 

2. Confusion Matrix 

우리가 이진 분류(True/False)를 시행할 때, True를 얼마나 정확히 예측했는가도 중요하지만 False에 대해서도 정확히 예측하였는가도 눈여겨 봐야할 부분이다. 

이러한 판단을 하는데에 도움이 되는 것이 오차행렬(Confusion Matrix )이다. 즉 우리는 오차행렬을 이용하여 분류기의 성능을 결정할 수 있다. 아래 표는 spam / ham을 분류하는 이진 분류기의 오차행렬이다. 

 

출처 : https://manisha-sirsat.blogspot.com/2019/04/confusion-matrix.html

오차 행렬의 4가지 출력 

  • True Positive(TP)
  • False Negative(FN)
  • True Negative(TN)
  • False Psotive(FP)

True Positive(TP) : 실제 spam에 spam 판정 

 

False Negative(FN) :  실제 spam에 ham이라 판정 

 

True Negative(TN) : ham에게 spam이라 판정 

 

False Psotive(FP) : ham에게 ham이라 판정 

 

오차핼렬을 이용한 각 출력의 수치로 계산되는 성능 지표

  • 정밀도(Precision)
  • 재현율(Recall,Sensitivity)
  • F1 스코어(F1 score) 
  • 정확도(Accuracy)

 

각 성능지표의 계산은 위 그림과 같다. 각 지표의 계산 수식을 보았을 때, 

precision : 분자 ,분모에 공통으로 존재하는 것이 TP이고 분모에 FP가 있으므로 precision 에서 중요시 하는 점은 아닌 것을 맞다고 판단하는 것을 줄여야 한다는 것이다. 

Recall : precision과 비슷하게 분모에 FN이 있으므로 맞는것을 틀리다고 판단하는 것을 줄이는 것에 중점이 있다. 

F1 score : precision과 recall의 조화평균으로 두 지표의 중요성이 모두 부각되는 모델에 사용하기 적합하고 지표위에 있는 1값을 바꿔줌으로써 가중평균을 적용할 수 있다. 

Acurracy : 모든 경우의 수에서 정확하게 분류를 한 경우에 대해서만 고려한 지표 

 

 

아래 코드를 이용하여 성능지표를 조회하는 것이 가능하다. 

from sklearn.metrics import classification_report

print(classification_report(y_test, y_pred))

 

 

위 평가지표를 이용하여 단순히 모델의 accuracy만 높다고 좋은 모델이 아니라고 판단할 수 있어야 하며 데이터에 따라 더욱 중요시되는 성능지표를 높이기 위해 전처리 작업을 실시해햐한다. 

Comments