-
텍스트 분류 실습 - 뉴스그룹 분류Python Machine Learning/텍스트 분석 2020. 11. 27. 17:36
텍스트 분류란 특정 문서의 분류를 학습 데이터를 통해 학습해 모델을 생성한 뒤 이 학습 모델을 이용해 다른 문서의 분류를 예측하는 것입니다. 기본적으로 텍스트를 기반으로 분류를 수행할 때는 먼저 텍스트를 정규화한 뒤 피처 벡터화를 적용하며 이후에 적합한 머신러닝 알고리즘을 적용해 분류를 학습/ 예측/ 평가 합니다.
사이킷런은 fetch_20newsgroups( ) API 를 이용해 뉴스그룹의 분류를 수행해 볼 수 있는 예제 데이터를 제공합니다.
이번 실습에서는 카운트 기반과 TF-IDF 기반의 벡터화를 차례로 적용해 예측 성능을 비교하고, 피처 벡터화를 위한 파라미터와 GridSearchCV 기반의 하이퍼 파라미터튜닝, 사이킷런의 Pipeline 객체를 통해 피처 벡터화 파라미터와 GridSearchCV 기반의 하이퍼 파라미터 튜닝을 한꺼번에 수행하는 방법을 설명하겠습니다.
( 텍스트 정규화 )
-> fetch_20newsgroups( )는 bunch 객체를 반환하며 몇 개의 키 값을 가지고 있습니다.
-> taret 클래스의 값은 0부터19까지 20개로 구성되어 있습니다.
-> 데이터 한 개를 추출하여 개별 데이터가 텍스트로 어떻게 구성돼 있는지 확인한 결과, 기사의 내용뿐만 아니라 뉴스그룹 제목, 작성자, 소속, 이메일등의 정보를 가지고 있습니다.
-> remove 파라미터를 이용해 헤더(header), 푸터(footer)등을 제거했습니다. 그 이유로는 이러한 헤더와 푸터 정보들은
뉴스그룹 분류의 Target 클래스 값과 유사한 데이터를 가지고 있는 경우가 많기 때문에 정확한 분석이 어렵습니다.
또한 fetch_20newsgroups( )는 subset 파라미터를 통해 학습 데이터 세트와 테스트 데이터 세트를 분리해 내려 받을 수 있습니다.
( 피처 벡터화 변환과 머신러닝 모델 학습/예측/평가 )
[ count 기반 벡터화 ]
-> 학습 데이터에 대해 fit( )된 CountVectorizer를 이용해서 테스트 데이터를 피처 벡터화 해야합니다.
테스트 데이터에서 다시 CountVectorizer의 fit_transform()을 수행하거나 fit()을 수행 하면 안되는데, 그 이유는
테스트 데이터에서 fit()을 수행하게 되면 기존 학습된 모델에서 가지는 feature의 갯수가 달라지기 때문입니다.-> 학습 데이터를 CountVectorizer Shape로 피처 추출한 결과 11314개의 문서에서 101631개의 단어가 생성되었습다.
-> count 기반으로 피처벡터화가 적용된 데이터 세트에 대한 로지스틱 회귀의 예측 정확도 0.617
'Python Machine Learning > 텍스트 분석' 카테고리의 다른 글
감성 분석 - IMDB 영화평 (0) 2020.12.24 텍스트 분류 실습 - 뉴스그룹 분류(2) (0) 2020.12.23 Bag of Words - BOW (0) 2020.11.14 텍스트 사전 준비 작업( 텍스트 전처리 ) - 텍스트 정규화 (0) 2020.11.14 텍스트 분석 (0) 2020.10.20