본문 바로가기

반응형

텍스트 마이닝

(52)
BOW 기반의 문서 분류 (8) 5.8 한국어 문서의 분류 5.8.2 성능을 개선하기 위한 노력 tfidf = TfidfVectorizer(tokenizer=okt.morphs, max_features=2000, min_df=5, max_df=0.5) # 명사 대신 모든 형태소를 사용 X_train_tfidf = tfidf.fit_transform(X_train) X_test_tfidf = tfidf.transform(X_test) clf = LogisticRegression(max_iter=1000) # 충분한 학습을 위해 max_iter를 1,000으로 설정, 기본은 100 clf.fit(X_train_tfidf, y_train) print('#Train set score: {:.3f}'.format(clf.score(X_train..
BOW 기반의 문서 분류 (7) 5.8 한국어 문서의 분류 5.8.1 다음 영화 리뷰에 대한 영화 제목 예 import pandas as pd df = pd.read_csv('/content/daum_movie_review.csv') df.head(5) df.title.value_counts() """ 신과함께 4947 택시운전사 2322 인피니티 워 2042 범죄도시 1939 곤지암 1547 라라랜드 1150 코코 778 Name: title, dtype: int64 """ from sklearn.model_selection import train_test_split # split data and labels into a training and a test set X_train, X_test, y_train, y_test = trai..
BOW 기반의 문서 분류 (6) 5.7 카운트 기반의 문제점과 N-gram을 이용한 보완 5.7.1 통계로는 알 수 없는 문맥 정보 BOW는 단어들이 쓰여진 순서에 따른 문맥 정보를 이용할 수 없음 BOW는 단어들의 순서를 무시하고, 단어가 사용된 횟수를 기반으로 문서에 대한 벡터 만듬 5.7.2 N-gram의 이해 N-gram: n개의 연속적인 단어들의 나열 하나의 토큰이 두개 이상의 단어로 구성될 수 있음 5.7.3 N-gram을 이용한 문서 분류 from nltk.corpus import stopwords from sklearn.feature_extraction.text import TfidfVectorizer from nltk.corpus import stopwords cachedStopWords = stopwords.words..
BOW 기반의 문서 분류 (5) 5.6 성능을 높이는 방법 import nltk nltk.download('stopwords') nltk.download('stopwords', quiet=True) # Download stopwords without the graphical interface """ [nltk_data] Downloading package stopwords to /root/nltk_data... [nltk_data] Package stopwords is already up-to-date! True """ # 필요한 library들을 import from nltk.corpus import stopwords cachedStopWords = stopwords.words("english") from nltk.tokenize i..
BOW 기반의 문서 분류 (4) 5.4 로지스틱 회귀분석을 이용한 문서 분류 5.4.2 라쏘 회귀를 이용한 특성 선택 라쏘 회귀: 특성의 계수에 대해 정규화를 하지만 L1 정규화 사용 lasso_clf = LogisticRegression(penalty='l1', solver='liblinear', C=1) # Lasso는 동일한 LogisticRegression을 사용하면서 매개변수로 지정 lasso_clf.fit(X_train_tfidf, y_train) # train data로 학습 print('#Train set score: {:.3f}'.format(lasso_clf.score(X_train_tfidf, y_train))) print('#Test set score: {:.3f}'.format(lasso_clf.score(X_t..
BOW 기반의 문서 분류 (3) 5.4 로지스틱 회귀분석을 이용한 문서 분류 from sklearn.linear_model import LogisticRegression #sklearn이 제공하는 logistic regression을 사용 #count vector에 대해 regression을 해서 NB와 비교 LR_clf = LogisticRegression() #분류기 선언 LR_clf.fit(X_train_tfidf, y_train) # train data를 이용하여 분류기를 학습 print('Train set score: {:.3f}'.format(LR_clf.score(X_train_tfidf, y_train))) # train data에 대한 예측정확도 print('Test set score: {:.3f}'.format(LR_..
BOW 기반의 문서 분류 (2) 5.2 머신러닝과 문서 분류 과정에 대한 이해 머신러닝을 이용한 문서 분류의 과정 데이터 정제, 전처리 데이터 분리 머신러닝 학습 평가 최종모형 도출 예측 5.3 나이브 베이즈 분류기를 이용한 문서 분류 사전 확률: 특성에 대한 정보가 없을 때 학습 데이터셋의 분포를 통해 확인한 확률 from sklearn.naive_bayes import MultinomialNB #sklearn이 제공하는 MultinomialNB 를 사용 NB_clf = MultinomialNB() # 분류기 선언 NB_clf.fit(X_train_cv, y_train) #train set을 이용하여 분류기(classifier)를 학습 print('Train set score: {:.3f}'.format(NB_clf.score(X_t..
BOW 기반의 문서 분류 (1) 5.1 20 뉴스그룹 데이터 준비 빛 특성 추출 20 뉴스그룹 데이터셋: 텍스트 마이닝에서 문서 분류의 성능을 측정하기 위해 가장 많이 사용되는 데이터셋 중 하나 5.1.1 데이터셋 확인 및 분리 사이킷런 20 뉴스그룹 데이터 특징 categories 매개변수를 이용해 20개의 topic 중에서 원하는 토픽을 선택할 수 있다. remove로 필요 없는 데이터를 삭제할 수 있다 각 데이터셋 내에서 .data는 텍스트의 내용을, .target은 숫자로 표시된 라벨을 가져오는 데 사용된다 from sklearn.datasets import fetch_20newsgroups #20개의 토픽 중 선택하고자 하는 토픽을 리스트로 생성 categories = ['alt.atheism', 'talk.religion.m..
카운트 기반의 문서 표현 (5) 4.6 TF-IDF로 성능을 높여보자 TF-IDF: 단어빈도-역문서 빈도 카운트 대신 단어의 빈도에 그 단어가 출현한 문서 수의 역수를 곱하는 것 from sklearn.feature_extraction.text import TfidfTransformer transformer = TfidfTransformer() transformer reviews_tfidf = transformer.fit_transform(reviews_cv) print('#shape of tfidf matrix:', reviews_tfidf.shape) #TF-IDF 행렬의 모양과 카운트 행렬의 모양이 일치하는 것을 확인 #첫 리뷰의 카운트 벡터 중 앞 20개 값 출력 print('#20 count score of the first ..
카운트 기반의 문서 표현 (4) 4.5 카운트 벡터의 활용 문서로부터 특성을 추출하는 하나의 방법 이렇게 추출된 벡터는 머신러닝 기법을 적용하기 위한 입력으로 사용되어 문서 분류로부터 시작해 다양한 분야에 활용 가능 이전에 이 벡터는 문서 간의 유사도를 측정하는 데에 사용 코사인 유사도: 두 벡터가 이루는 각도의 코사인값으로 정의되는 유사도 %matplotlib inline import matplotlib.pyplot as plt import matplotlib as mpl # 그래프에서 마이너스 폰트 깨지는 문제에 대한 대처 mpl.rcParams['axes.unicode_minus'] = False import numpy as np x = np.arange(0,2*np.pi,0.1) # start,stop,step y = np.co..

반응형