TF-IDF
Term Frequency - Inverse Document Frequency
์ค์ด์ TF-IDF๋ก ๋จ์ด์ ๋น๋์ ์ญ๋ฌธ์ ๋น๋๋ฅผ ์ฌ์ฉํ์ฌ DTM*๋ด์ ๋จ์ด๋ง๋ค ์ค์ํ ์ ๋๋ก ๋๋์ด ๊ฐ์ค์น๋ฅผ ์ฃผ๋ ๋ฒ์ ๋๋ค.
โ
์ฃผ๋ก ์ฌ์ฉํ๋ ๊ณณ์ ๋ฌธ์์ ์ ์ฌ๋๋ฅผ ๊ตฌํ ๋ ์ฌ์ฉํฉ๋๋ค.
๋ฌธ์์ ์ ์ฌ๋๋ผ ํจ์, ๊ฒ์ ์์คํ ์์ ๊ฒ์ ๊ฒฐ๊ณผ์ ์ค์๋๋ฅผ ๊ตฌํ ๋์ ์ ์ฌ๋๋ฅผ ์๋ฏธํฉ๋๋ค.
tf๋ ๋จ์ด๊ฐ ๊ฐ ๋ฌธ์์์ ๋ฐ์ํ ๋น๋๊ฐ (๋จ์ด๊ฐ ๋ฑ์ฅํ '๋ฌธ์'์ ๋น๋๋ฅผ df๋ผ ํฉ๋๋ค) ์ ์ ๋ฌธ์์์ ๋ฐ๊ฒฌ๋ ์๋ก ๊ฐ์น ์๋ ์ ๋ณด๋ผ๊ณ ํ ์ ์์ต๋๋ค.
๋ง์ ๋ฌธ์์ ๋ฑ์ฅํ๋ ๋จ์ด์ผ์๋ก ์ผ๋ฐ์ ์ธ ๋จ์ด์ด๋ฉฐ ์ด๋ฌํ ๊ณตํต ์ ์ธ ๋จ์ด๋ tf๊ฐ ํฌ๋ค๊ณ ํ์ฌ๋ ๋น์ค์ ๋ฎ์ถ์ด์ผ ๋ถ์์ด ์ ๋๋ก ์ด๋ฃจ์ด์ง ์ ์์ต๋๋ค
๋ฐ๋ผ์ ๋จ์ด๊ฐ ํน์ ๋ฌธ์์๋ง ๋ํ๋๋ ํฌ์์ฑ์ ๋ฐ์ํ๊ธฐ ์ํด์ ' idf(df์ ์ญ์)๋ฅผ tf์ ๊ณฑํ ๊ฐ์ ์ฌ์ฉํฉ๋๋ค
ํด๋น๋ฌธ์์์ ์ฃผ์ ๋ฅผ ์ฐพ์๋ด๋ ๊ฒฝ์ฐ
๋ฐ๋ฉด, CountVectorizer ๋ ํ ์คํธ์์ ์ฃผ์ธ๊ณต์ ์ฐพ๊ฑฐ๋, ๋ง์ด ๋ฐ๋ณต๋๋ ํค์๋๋ฅผ ์ฐพ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋ฉ๋๋ค.
# tf-idf ์งํ
import pandas as pd
text_train = pd.read_csv('ratings_train.txt', delimiter='\t')
text_test = pd.read_csv('ratings_test.txt',delimiter='\t')
text_train.dropna(inplace=True)
text_test.dropna(inplace=True)
X_train = text_train['document']
y_train = text_train['label']
X_test = text_test['document']
y_test = text_test['label']
!pip install konlpy
from konlpy.tag import Okt
okt = Okt()
def myToken(text):
return okt.nouns(text)
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.pipeline import make_pipeline
pipe_model = make_pipeline(TfidfVectorizer(tokenizer=myToken), LogisticRegression())
pipe_model.fit(X_train, y_train)
### ์๋ฌ ๋ ๋ถ๋ถ
print("pipe model score : "+ pipe_model.score(X_test,y_test))
# pipeline ์ดํด๋ณด๊ธฐ
cv = pipe_model.steps[0][1]
print(len(cv.vocabulary_))
logi = pipe_model.steps[1][1]
word_weights = logi.coef_
df = pd.DataFrame([cv.vocabulary_.keys(),
cv.vocabulary_.values()])
print(df.head())
df = df.T
print(df.T)
df_sorted = df.sort_values(by=1)
print(df_sorted)
df_sorted['coef'] = word_weights.reshape(-1)
print(df_sorted)
df_sorted.sort_values(by = 'coef', inplace =True)
print(df_sorted)
pipe_model.score(X_test,y_test)
# pipeline ์ดํด๋ณด๊ธฐ
cv = pipe_model.steps[0][1]
print(len(cv.vocabulary_))
logi = pipe_model.steps[1][1]
word_weights = logi.coef_
df = pd.DataFrame([cv.vocabulary_.keys(),
cv.vocabulary_.values()])
print(df.head())
df = df.T
print(df.T)
df_sorted = df.sort_values(by=1)
print(df_sorted)
df_sorted['coef'] = word_weights.reshape(-1)
print(df_sorted)
df_sorted.sort_values(by = 'coef', inplace =True)
print(df_sorted)
๋ฐ์ดํฐ ์๊ฐํ
# ์๊ฐํ
# ๋ถ์ ๋จ์ด ์์ 15๊ฐ
bad_word = df_sorted.head(15)
# ๊ธ์ ๋จ์ด ์์ 15๊ฐ
good_word = df_sorted.tail(15)
๋ถ์ ๊ณผ ๊ธ์ ๋จ์ด ์์ฐ 15๊ฐ๋ก ๋๋ ์๊ฐํ๋ฅผ ์งํํ๋ ค ํฉ๋๋ค.
top15 = pd.concat([bad_word, good_word])
import matplotlib.pyplot as plt
from matplotlib import font_manager, rc
#ํ๊ธ ์ถ๋ ฅ์ ์ํ ์ธํ
, ๋ง์ ํฐํธ
font_name = font_manager.FontProperties(fname="C:\Windows\Fonts\malgun.ttf").get_name()
rc('font',family=font_name)
plt.figure(figsize=(15,5))
plt.title('๊ธ์ /๋ถ์ ์์ 15๊ฐ ์๊ฐํ', fontsize=20)
plt.bar(top15[0],top15['coef'])
plt.xticks(rotation = 90)
plt.show()
๊ฒฐ๊ณผ๋น๊ต, ์ผ๋ฐ์ ์ธ countervector
'๐๏ธ์ํํธ์จ์ด > ๐ปpython' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
cannot import name 'image' from 'PIL' ์๋ฌ (0) | 2021.11.13 |
---|---|
No module named 'cv2' ์๋ฌ ํด๊ฒฐ๋ฐฉ๋ฒ (0) | 2021.11.13 |
[ML] 5๋ถ์์ ๋จธ์ ๋ฌ๋ ๋ฟ์๊ธฐ (feat.breast cancer) (0) | 2021.11.05 |
[ML] sklearn (0) | 2021.11.04 |
[ML] ๋ถ๊ฝ ํ์ข ๋ถ๋ฅ Story 1 (0) | 2021.11.04 |