Lingmoumou's Blog

きっといつかって愿うまま

0%

Day2 学习TF-IDF理论并实践

任务

学习TF-IDF理论并实践,使用TF-IDF表示文本


TF-IDF(Term Frequency–Inverse Document Frequency)

主要思想是:如果词i在一篇文档j中出现的频率高,并且在其他文档中很少出现,则认为词i具有很好的区分能力,适合用来把文章j和其他文章区分开来。适合用来分类。

TF-IDF实际上是:TF * IDF
$$ tfidf_{i,j}=tf_{i,j}\times idf_{i} $$

TF词频(Term Frequency):某一个给定的词语在该文件中出现的频率。
$$ tf_{i,j}=\frac{n_{i,j} }{\sum {k}n{k,j}} $$

IDF逆向文件频率(Inverse Document Frequency):是一个词语普遍重要性的度量。如果包含词条t的文档越少,也就是n越小,IDF越大,则说明词条t具有很好的类别区分能力。如果某一类文档C中包含词条t的文档数为m,而其它类包含t的文档总数为k,显然所有包含t的文档数n=m+k,当m大的时候,n也大,按照IDF公式得到的IDF的值会小,就说明该词条t类别区分能力不强。
$$ idf_{i}=lg\frac{\left | D \right |}{\left | \left { j:t_{i}\in d_{j} \right } \right |} $$


代码

1
2
3
4
5
6
7
8
9
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer

vectorizer = TfidfVectorizer(ngram_range=(1, 2), min_df=3, max_df=0.9, sublinear_tf=True)
vectorizer.fit(train_set['word_seg'])
x_train = vectorizer.transform(train_set['word_seg'])
x_val = vectorizer.transform(val_set['word_seg'])

print(x_trains)