Python 튜토리얼

Lv1 python 파이썬 텍스트 데이터 분석 복습

2021.10.21 09:35 5,649 Views

안녕하세요. 여러분 이전 컨텐츠를 마지막으로 텍스트 데이터 분석 실습 내용이 모두 공개 되었습니다. 👩‍💻👨‍💻


이번 시간에는 텍스트 데이터 분석의 전체 과정을 정리하고, 실습 해보도록 하겠습니다.


1️⃣데이터 불러오기

pandas 라이브러리의 read_csv 메소드를 이용해 데이터를 불러옵니다.

데이터를 불러올 때 nrows / header / index_col / na_filter / skipfooter 등 다양한 파라미터를 활용할 수 있습니다.


2️⃣불필요한 텍스트 제거

텍스트 데이터에서 불필요한 텍스트를 제거 합니다. 텍스트를 제거하는 방법으로는 replace() / apply(),lambda() / isalph() / isalnumI() 등의 메소드를 활용할 수 있습니다.


3️⃣형태소 분석

형태소 분석이란 어근, 접두사/미사, 품사(pos) 등 다양한 언어적 속성의 구조를 파악하는 것을 말하며 한국어 형태소 분석기 (Okt, Komoran, Kkma, Mecab) 를 이용하여 한글 텍스트의 형태소를 분석하는 작업을 진행합니다. 형태소 분석을 통해 문장을 단어 단위로 쪼갤 수 있습니다.


4️⃣텍스트 데이터 벡터화

머신러닝 모델은 텍스트로 된 변수를 바로 사용할 수 없습니다. 텍스트를 특정 의미가 있는 숫자형 값인 벡터 값으로 변환해야 되는데, 이를 피처 벡터화라고 합니다. 피처 벡터화에는 가장 단순한 Bag of Word 라는 방법이 있고, Bag of Word에는 카운트 기반 벡터화(CountVectorizer), TF-IDF(Term Frequency - Inverse Document Frequency) 기반 벡터화 가 있습니다.


5️⃣train_test_split

머신러닝 모델이 너무 train 데이터에 딱 맞춰서 학습이 되어 실제 테스트 데이터에서는 성능이 잘 나오지 않는 경우가 발생합니다.

이런 경우를 모델이 과적합 되었다라고 표현합니다. 모델의 과적합을 방지하고 현재 모델의 성능이 어느정도인지 확인하기 위해 train 데이터셋을 rain/ validation 으로 일정 비율 쪼갠 다음 학습 시에는 train 셋을 이용하고 학습 후 중간 중간 validation 셋으로 내가 학습한 모델을 평가 합니다. 이 과정에서 데이터셋을 손쉽게 분리할 수 있게 도와주는 메소드가 train_test_split() 메소드 입니다.


6️⃣하이퍼 파라미터 튜닝 (Grid Search)

하이퍼파라미터란 머신러닝 모델을 정의할 때 사용자가 직접 세팅해주는 값을 뜻합니다.

learning rate나 트리 기반 모델의 트리의 최대 깊이, 최소 노드 갯수 등 굉장히 많습니다. 머신러닝 모델을 쓸 때 사용자가 직접 세팅해야 하는 값은 상당히 많은데 그 모든 값이 다 하이퍼 파라미터 입니다.

이러한 하이퍼 파라미터를 찾아주는 grid search, basian optimization 등 다양한 방법이 있습니다.



------------------------------------------------------------------------------------------------------------------------------------------

# 데이터 불러오기

import pandas as pd


train = pd.read_csv('data/train.csv',usecols = ['category','data'])

test = pd.read_csv('data/test.csv',usecols = ['data'])


# train,test 데이터에서  '\\n' 단어 제거


train['data'] = train['data'].apply(lambda x : str(x).replace('\\n',' ')) # 텍스트 데이터에서 '\\n' 문자열을 ' '로 변경

test['data'] = test['data'].apply(lambda x : str(x).replace('\\n',' ')) # 텍스트 데이터에서 '\\n' 문자열을 ' '로 변경


#TF-IDF으로 train 데이터를 피처 벡터화 변환 수행

from sklearn.feature_extraction.text import TfidfVectorizer


vect = TfidfVectorizer()

vect.fit(train['data'])

train_x =  vect.transform(train['data'])


print('train 데이터 사이즈', train_x.shape)


#train_test_split() 메소드를 이용해 train/validation 데이터 나누기 

from sklearn.model_selection import train_test_split

x_train,x_valid, y_train, y_valid = train_test_split(train_x,train['category'],stratify = train['category'])


from sklearn.model_selection import GridSearchCV


# parameter 들을 dictionary 형태로 설정

# max_depth 와 min_samples_split 를 튜닝

parameters = {'max_depth':[1,2,3], 'min_samples_split':[2,3]}



# GridSearchCV 를 이용해 하이퍼 파리미터 튜닝(cv = 5 로 지정)

Grid = GridSearchCV(model, param_grid=parameters, cv=5)


# fit() 메소드를 이용해 학습

Grid.fit(train_x,train['category'])


# predict() 매소드를 이용해 예측

pred = Grid.predict(test_x)


# 정답파일에 예측값 붙여 넣기

submission = pd.read_csv('data/sample_submission.csv')

submission['category']  = pred


------------------------------------------------------------------------------------------------------------------------------------------


↩️ 오늘의 파이썬 리스트


👨‍💻데이스쿨 Up-Skill Re-Skill👩🏻‍💻


#데이콘_101 #AI #머신러닝 #딥러닝 #파이썬 #파이선 #데이터분석 #데이터사이언티스트 #코랩 #Python #colab #kaggle #pandas #numpy #파라미터 #하이퍼파라미터 #튜닝

로그인이 필요합니다
0 / 1000
DACON.NPC
2022.08.24 14:43

done

코튼클린
2023.01.17 16:24

done