-
8주차 과제 : Text data 처리
- 사용 언어 : python
- 해결 날짜 : 2021-11-15
-
코드 설명 :
- aclimdb 데이터를 train과 test로 나누어서 가져오고, train/test 데이터 안의 HTML 줄바꿈 태그인
을 삭제해준다. - CounterVectorizer()로 텍스트에서 단위별로 등장 횟수를 카운팅하여 수치 벡터화 하되, 불용어를 사용하지 않은 BOW 표현법/불용어를 사용한 BOW 표현법과 min_df 값을 변화시킬 때의 4가지 경우를 측정하였다.
- 또한 train/data 데이터를 각각 BOW 방법으로 나타낼 경우 각 feature의 값이 달라 같은 분류기를 사용하지 못하기 때문에 두 데이터 모두 사용하여 단어 사전 구축 및 불용어 처리를 하였다.
- 분류기로는 LogisticRegression을 사용하였고, 그 결과 데이터 단어 사전 미구축 및 불용어 처리를 안한 경우가 0.88943999999로 가장 높은 성능을 가졌다.
- aclimdb 데이터를 train과 test로 나누어서 가져오고, train/test 데이터 안의 HTML 줄바꿈 태그인
-
결과 :
-
코드
from sklearn.datasets import load_files import numpy as np reviews_train = load_files("./aclimdb/train/") reviews_test = load_files("./aclimdb/test/") train_text, train_target = reviews_train.data, reviews_train.target test_text, test_target = reviews_test.data, reviews_test.target train_text = [doc.replace(b"<br />", b" ") for doc in train_text] test_text = [doc.replace(b"<br />", b" ") for doc in test_text] from sklearn.feature_extraction.text import CountVectorizer, ENGLISH_STOP_WORDS from sklearn.model_selection import cross_val_score from sklearn.linear_model import LogisticRegression # train, test 데이터 모두 단어 사전 구축 및 불용어 처리한 경우 (min df = 5) vect = CountVectorizer(min_df = 5, stop_words="english").fit(train_text + test_text) train_text_transformed = vect.transform(train_text) test_text_transformed = vect.transform(test_text) logreg = LogisticRegression(max_iter=1000).fit(train_text_transformed, train_target) scores = cross_val_score(logreg, test_text_transformed, test_target, cv=5) print(np.mean(scores)) # train, test 데이터 단어 사전 구축만 한 경우 (불용어 처리 x) vect = CountVectorizer(min_df = 5).fit(train_text + test_text) train_text_transformed = vect.transform(train_text) test_text_transformed = vect.transform(test_text) logreg = LogisticRegression(max_iter=1000).fit(train_text_transformed, train_target) scores = cross_val_score(logreg, test_text_transformed, test_target, cv=5) print(np.mean(scores)) # train, test 불용어 처리 한 경우 (min_df = default) vect = CountVectorizer(stop_words="english").fit(train_text + test_text) train_text_transformed = vect.transform(train_text) test_text_transformed = vect.transform(test_text) logreg = LogisticRegression(max_iter=1000).fit(train_text_transformed, train_target) scores = cross_val_score(logreg, test_text_transformed, test_target, cv=5) print(np.mean(scores)) # train, test 데이터 단어 사전 구축 및 불용어 처리 둘 다 안한 경우 vect = CountVectorizer().fit(train_text + test_text) train_text_transformed = vect.transform(train_text) test_text_transformed = vect.transform(test_text) logreg = LogisticRegression(max_iter=1000).fit(train_text_transformed, train_target) scores = cross_val_score(logreg, test_text_transformed, test_target, cv=5) print(np.mean(scores))