一、TF-IDF理论
1.百科介绍:
TF-IDF(term frequency–inverse document frequency)是一种用于信息检索与数据挖掘的常用加权技术。TF意思是词频(Term Frequency),IDF意思是逆文本频率指数(Inverse Document Frequency)。
2.原理
TF
在一份给定的文件里,词频(term frequency, TF)指的是某一个给定的词语在该文件中出现的次数。这个数字通常会被归一化(分子一般小于分母区别于IDF),以防止它偏向长的文件。(同一个词语在长文件里可能会比短文件有更高的词频,而不管该词语重要与否。)
以上式子种分子为x词在第j个文件中出现的次数,而分母是在第j个文件中所有字词的出现词数之和。
IDF
逆向文件频率 (inverse document frequency, IDF) 是一个词语普遍重要性的度量。某一特定词语的IDF,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取对数得到。某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的TF-IDF。因此,TF-IDF倾向于过滤掉常见的词语,保留重要的词语。
其中,N代表语料库中文本的总数,而N(x)代表语料库中包含词x的文本总数。
TF-IDF主要思想:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。TFIDF实际上是:TF * IDF,TF词频(Term Frequency),IDF反文档频率。TF表示词条在文档d中出现的频率。
二、使用TF-IDF表示文本
1. 直接用 TfidfVectorizer 完成向量化与TF-IDF预处理
from sklearn.feature_extraction.text import TfidfVectorizer
corpus = ["I come to China to travel",
"This is a car polupar in China",
"I love tea and Apple",
"The work is to write some papers in science"]
tfidf = TfidfVectorizer()
re = tfidf.fit_transform(corpus)
print(re)
2. 用 CountVectorizer类向量化之后再调用 TfidfTransformer类 进行预处理
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.feature_extraction.text import CountVectorizer
corpus = ["I come to China to travel",
"This is a car polupar in China",
"I love tea and Apple",
"The work is to write some papers in science"]
vectorizer = CountVectorizer()
transformer = TfidfTransformer()
tfidf = transformer.fit_transform(vectorizer.fit_transform(corpus))
print(tfidf)
结果同 1
3.达观杯TF-IDF文本表示
使用方法一,直接用 TfidfVectorizer 完成向量化与TF-IDF预处理
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf = TfidfVectorizer()
vectorizer = tfidf.fit(X_train.iloc[:10,1])
X_train = vectorizer.fit_transform(df_train.iloc[:,1])
X_valid = vectorizer.fit_transform(X_valid.iloc[:,1])
print(X_train)
print('_____________')
print(X_valid)