일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- cook's distance
- 언어분석
- VIF
- 오류
- 이상치
- contrasts can be applied only to factors with 2 or more levels
- 워홀
- 예측
- 분류
- 엑셀
- 이변량 분석
- 다중공선성
- 등분산성
- by oneself
- 회귀모형
- 정규성
- 디시전트리
- 기술통계분석
- disgusting
- R
- 기본가정
- post man
- 코딩테스트
- sql
- 전처리
- 선형성
- 회귀분석
- 자기상관
- 등분산검정
- KNNImputer
- Today
- Total
excelsu의 공부 기록 블로그
Tf-idf 사용 언어 데이터 분석 본문
TF-IDF(단어 빈도-역 문서 빈도, Term Frequency-Inverse Document Frequency)
TF-IDF는 단어의 빈도와 역 문서 빈도(DF에 특정 식을 취함)를 사용하여 DTM 내의 각 단어들마다 중요한 정도를 가중치로 주는 방법입니다. 우선 DTM을 만든 후, TF-IDF 가중치를 부여합니다.
TF-IDF는 주로 문서의 유사도를 구하는 작업, 검색 시스템에서 검색 결과의 중요도를 정하는 작업, 문서 내에서 특정 단어의 중요도를 구하는 작업 등에 쓰일 수 있습니다.
TF-IDF는 TF와 IDF를 곱한 값을 의미합니다.
가상의 음성인식 데이터를 분류해야하는 문제
컬럼 : contents, label
import os
import numpy as np
import pandas as pd
from sklearn.feature_extraction.test import TfidfVectorizer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
#언어값, 라벨(y)값을 따로 받아와 저장
content=list(data_set['contents'])
lb=list(data_set['label'])
#vectorizer생성(언어 벡터화)
vectorizer=TfidfVectorizer(min_df=0.0, analyzer='char',
sublinear_tf=True, ngram_range=(1,3), max_features=5000)
#언어 학습, 라벨도 같은형태로
x=vectorizer.fit_transform(contents)
y=np.array(lb)
#학습, 검증데이터분리
x_train, x_test, y_train, y_test=train_test_split(x,y,test_size=0.2,random_state=2022)
#모델생성, 학습, 검증
model=LogisticRegression(class_weight='balanced')
model.fit(x_train,y_train)
print("Accuracy : %f" %model.score(x_test,y_test))
파라미터 살펴보기
min-df는 DF(document-frequency)의 최소 빈도값을 설정해주는 파라미터입니다.
DF는 특정 단어가 나타나는 '문서의 수'를 의미합니다.
단어의 수가 아니라 문서의 수라는 것에 주의해 주세요.
이러한 DF의 최소값을 설정하여 해당 값보다 작은 DF를 가진 단어들은
단어사전에서 제외하고, 인덱스를 부여하지 않습니다.
이것이 바로 min_df 파라미터 입니다.
analyzer 파라미터는 학습단위를 결정하는 파라미터입니다.
word, char 2가지 옵션 정도를 고려해볼 수 있습니다.
analyzer = 'word'라고 설정시, 학습의 단위를 단어로 설정합니다. (ex - home, go, my ...)
analyzer = 'char'라고 설정시, 학습의 단위를 글자로 설정합니다.(ex - a, b, c, d ...)
sublinear_tf 파라미터는 TF (Term-Frequency, 단어빈도) 값의 스무딩(smoothing) 여부를 결정하는 파라미터 입니다. (True/False)
TF -> 1 + ln(TF)
위와 같은 수식을 통해 스무딩 처리가 이루어집니다.
sublinear_tf는 높은 TF값을 완만하게 처리하는 효과를 가지고 있습니다.
TF의 아웃라이어가 너무 심한 데이터의 경우,
이런 서브리니어 파라미터를 True로 바꿔주면 어느정도 효과를 기대할 수 있습니다.
'TF 값에 대해 아웃라이어 처리를 해준다'라는 효과 정도만 기억하고 넘어가시면 되겠습니다.
n-gram은 단어의 묶음을 범위를 설정하는 것입니다.
예를들어, ngram_range = (1, 1)이라면 단어의 묶음을 1개부터 1개까지 설정하라는 의미입니다.
단어사전에는 1개 단어묶음에 인덱스가 할당되겠죠.
이는 기존의 벡터라이저와 별 차이가 없는 결과를 내놓습니다.
만약 ngram_range = (1, 2)라고 한다면, 단어의 묶음을 1개부터 2개까지 설정하라는 뜻입니다.
단어사전에는 1개 단어묶음도 있고, 2개 단어묶음도 존재하게 되겠죠.
가령, 'go home', 'very good'과 같은 2개 짜리 묶음도 인덱스를 받게 되는 것입니다.
max_feature는 tf-idf vector의 최대 feature를 설정해주는 파라미터입니다.
해당 파라미터를 이해하려면, feature의 개념에 대해 아셔야 합니다.
머신러닝에서 feature란, 테이블의 컬럼에 해당하는 개념입니다.
또한 행렬의 열에 해당하는 것이기도 합니다.
TF-IDF 벡터는 단어사전의 인덱스만큼 feature를 부여받습니다.
자연어처리 데이터를 다루다보면, 엄청 긴 데이터를 만날 수 있습니다.
예를 들어서 다른 데이터의 단어들은 10정도를 가지는데,
어떤 데이터만 단어 종류가 100이 넘어간다고 하면, 이
100에 맞추어 feature의 수가 엄청 늘어나게 됩니다.
그럴 경우, 모델 성능이 저하될 수도 있는 것이죠.
그렇기 때문에 사전에 EDA를 통해서 데이터의 length를 확인하시는 것이 중요합니다.
그렇게 되면 통계적으로 엄청 정확한 기준은 아닐지라도,
대략 해당 파라미터의 스타트 지점을 유추해 볼 수 있을 것입니다.
출처: https://chan-lab.tistory.com/27 [은공지능 공작소:티스토리]