이전에 클러스터링으로 진행했던 결과와 비교하기 위해서 이번에는 지도학습으로 동일하게 문서 분류를 진행하고자 한다.
기존 데이터셋에 CATEGORY라는 colunm을 추가하여 지도학습에 사용할 데이터를 생성한다.
팀장님께서 요구하셨던 것이 사내 문서 제목으로만 분류를 하는 것 이였기에
순전히 문서 제목에서 키워드를 탐지하여땨.
1. 데이터 생성
세 개의 Class로 분류하는데
0 == 교육 : 문서 제목에 교육등의 단어가 포함된 문서들
1 == 시험 : 문서 제목에 시험 등의 단어가 포함된 문서들
2 == 자료 : 그 외의 모든 문서들
로 CATEGORY colunm의 값을 POWER ☆NOGADA☆로 지정하였.땨
2. 최적 모델 탐지
좋은 라이브러리를 하나 소개하고자 한다.
사용하는 Dataset을 기준으로 어떤 모델을 사용할때 최적의 결과값을 도출 할 수 있는지에 대해서 고민하고 있었다.
이 때 모델 선정에 도움을 줄 수 있는 파이썬 라이브러리가 있다.
pycaret 이라는 라이브러리이다.
자세한 설명은 하단의 url을 참고하길 바란다
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
- 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
- KNN : 0.6186
- NB : 0.5743
- RF : 0.5641
Pred
- KNN : 0.7510
- 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. 모델 선정
- KNN
- NB
- RF
+) SVM
사실 애초에 문서 제목을 가지고 분류를 진행하기 때문에 당연히 KNN은 해야한다고 생각을 했었다.
이후 성능이 좋게 나온 naive baysian과 random forest를 사용하여 모델 적용을 진행하고자 한다.
그러나 문득 든 생각이
문서를 분류하는 것이 형태소 분석을 진행한 이후에 tf-idf로 vector 화 된 값을 처리해햐하는 것을 깨닫고
다차원에서 유리한 svm까지 사용해보고자 한다.

'😒 저 저 저 개념없는 나 > ⛓️ DL & ML' 카테고리의 다른 글
[문서 제목 자동 분류 작업 | Classification] 3. 최종 실행 | 인턴 (0) | 2024.01.29 |
---|---|
[문서 제목 자동 분류 작업 | Classification] 2. 모델 별 실행 결과 | 인턴 (1) | 2024.01.29 |
[문서 제목 자동 분류 작업 | Clustering] 5. 한국어 Text Clustering Word2Vec K-means | 인턴 (0) | 2024.01.17 |
[문서 제목 자동 분류 작업 | Clustering] 4. 한국어 Text Clustering TF-IDF K-means | 인턴 (1) | 2024.01.15 |
[문서 제목 자동 분류 작업 | Clustering] 3. K-Means 알고리즘 학습 적용 군집화 | 인턴 (0) | 2024.01.15 |