😒 저 저 저 개념없는 나/⛓️ DL & ML

[문서 제목 자동 분류 작업 | Classification] 1. 데이터 생성 및 최적 모델 탐지 | 인턴

우주수첩 2024. 1. 29. 11:45
728x90

이전에 클러스터링으로 진행했던 결과와 비교하기 위해서 이번에는 지도학습으로 동일하게 문서 분류를 진행하고자 한다. 

 

기존 데이터셋에 CATEGORY라는 colunm을 추가하여 지도학습에 사용할 데이터를 생성한다. 

 

팀장님께서 요구하셨던 것이 사내 문서 제목으로만 분류를 하는 것 이였기에

 

순전히 문서 제목에서 키워드를 탐지하여땨.

 


1. 데이터 생성

 

세 개의 Class로 분류하는데

0 == 교육 : 문서 제목에 교육등의 단어가 포함된 문서들

1 == 시험 : 문서 제목에 시험 등의 단어가 포함된 문서들

2 == 자료 : 그 외의 모든 문서들

 

로 CATEGORY colunm의 값을 POWER ☆NOGADA☆로 지정하였.땨

 

 


 

2. 최적 모델 탐지

 

 

좋은 라이브러리를 하나 소개하고자 한다.

 

 

 

사용하는 Dataset을 기준으로 어떤 모델을 사용할때 최적의 결과값을 도출 할 수 있는지에 대해서 고민하고 있었다.

 

이 때 모델 선정에 도움을 줄 수 있는 파이썬 라이브러리가 있다. 

 

pycaret 이라는 라이브러리이다. 

 

자세한 설명은 하단의 url을 참고하길 바란다

 

https://velog.io/@ezoo0422/Python-pycaret%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC-%EB%AA%A8%EB%8D%B8-%EC%84%A0%EC%A0%95%ED%95%98%EA%B8%B0

 

 

 

2_1. pycaret  적용

import pandas as pd
from pycaret.classification import *

csv_file_path = '../data/spv/modified_testing_dataset.csv'

try:
    df = pd.read_csv(csv_file_path, encoding='utf-8')
except UnicodeDecodeError:
    print('utf-8으로 디코딩하는 중 오류 발생. 다른 인코딩 시도 필요.')


train = df.sample(frac=0.8, random_state=786)
test = df.drop(train.index)
train.reset_index(inplace=True, drop=True)
test.reset_index(inplace=True, drop=True)


exp_clf = setup(data = train, target = 'CATEGORY', session_id=123)

best_model = compare_models()

print(best_model)

 

  • 사용하는 csv 파일을 가져와 train과 test용으로 data set을 임의로 구분 한다.
  • 분류하고자 하는 target이 무엇인지 입력 후 model 비교를 시작한다.
  • 본문에서는 앞서 설정해 둔 'category'를 기준으로 분류 모델을 비교하였다.

 

 

2_2. pycaret 실행 결과

 

Model  Accuracy     AUC  Recall   Prec.  \
dt            Decision Tree Classifier    0.8285  0.5000  0.8285  0.6864   
ridge                 Ridge Classifier    0.8285  0.0000  0.8285  0.6864   
rf            Random Forest Classifier    0.8285  0.5641  0.8285  0.6864   
ada               Ada Boost Classifier    0.8285  0.5000  0.8285  0.6864   
gbc       Gradient Boosting Classifier    0.8285  0.5000  0.8285  0.6864   
lda       Linear Discriminant Analysis    0.8285  0.5000  0.8285  0.6864   
et              Extra Trees Classifier    0.8285  0.5413  0.8285  0.6864   
dummy                 Dummy Classifier    0.8285  0.5000  0.8285  0.6864   
nb                         Naive Bayes    0.8283  0.5743  0.8283  0.6864   
knn             K Neighbors Classifier    0.8003  0.6186  0.8003  0.7510   
qda    Quadratic Discriminant Analysis    0.6134  0.5000  0.6134  0.4858   
svm                SVM - Linear Kernel    0.5472  0.0000  0.5472  0.4200   
lr                 Logistic Regression    0.0071  0.5000  0.0071  0.0001

 

 

F1   Kappa     MCC  TT (Sec)  
dt     0.7508  0.0000  0.0000     0.048  
ridge  0.7508  0.0000  0.0000     0.049  
rf     0.7508  0.0000  0.0000     0.102  
ada    0.7508  0.0000  0.0000     0.083  
gbc    0.7508  0.0000  0.0000     0.171  
lda    0.7508  0.0000  0.0000     0.050  
et     0.7508  0.0000  0.0000     0.086  
dummy  0.7508  0.0000  0.0000     0.051  
nb     0.7507 -0.0004 -0.0019     0.062  
knn    0.7685  0.1102  0.1218     0.207  
qda    0.5348  0.0000  0.0000     0.050  
svm    0.4644  0.0000  0.0000     0.081  
lr     0.0001  0.0000  0.0000     0.418

 

 


 

 

3. 판단

 

기준 별 top 3

Accuracy / Recall

  1. dt / Decision Tree Classifier
    ridge / Ridge Classifier
    rf / Random Forest Classifier
    ada / Ada Boost Classifier
    gbc / Gradient Boosting Classifier
    lda / Linear Discriminant Analysis
    et / Extra Trees Classifier
    dummy / Dummy Classifier
    Naive Bayes ⇒0.8285

 

AUC

  1. KNN : 0.6186
  2. NB : 0.5743
  3. RF : 0.5641

 

Pred

  1. KNN : 0.7510
  2. dt / Decision Tree Classifier
    ridge / Ridge Classifier
    rf / Random Forest Classifier
    ada / Ada Boost Classifier
    gbc / Gradient Boosting Classifier
    lda / Linear Discriminant Analysis
    et / Extra Trees Classifier
    dummy / Dummy Classifier
    Naive Bayes ⇒ 0.684

 

 

4. 모델 선정

  1. KNN
  2. NB
  3. RF

+) SVM

 

 

사실 애초에 문서 제목을 가지고 분류를 진행하기 때문에 당연히 KNN은 해야한다고 생각을 했었다.

이후 성능이 좋게 나온 naive baysian과 random forest를 사용하여 모델 적용을 진행하고자 한다.

 

그러나 문득 든 생각이

 

문서를 분류하는 것이 형태소 분석을 진행한 이후에 tf-idf로 vector 화 된 값을 처리해햐하는 것을 깨닫고

다차원에서 유리한 svm까지 사용해보고자 한다. 

 

 

728x90