TF-IDF特征提取 用sklearn提取tfidf特征

n-gram

此处的TF和IDF的公式,都是sklearn中的tfidf使用的公式。和最原始的公式会有些出入。并且根据一些参数的不同而不同。

名词的解释:
corpus:指所有documents的集合
documents:词语的有序排列。可以是一篇文章、一个句子之类。

词频(TF)

在一份给定的文件里,词频(term frequency,tf)指的是某一个给定的词语在该文件中出现的频率。这个数字是对词数(term count)的归一化,以防止它偏向长的文件。(同一个词语在长文件里可能会比短文件有更高的词数,而不管该词语重要与否。)对于在某一特定文件里的词语 t 来说, tft 可表示为:

tfd,t=nd,tknd,k

其中 tfd,t 表示词语 t 在文档 d 中出现的频率。 nd,t 表示词语 t 在文档 d 中出现的次数。

文件频率(DF)

文件频率(document frequency, df)
dft 表示包含词语 t 的document个数。

逆向文件频率(IDF)

逆向文件频率(inverse document frequency,idf)是一个词语普遍重要性的度量。某一特定词语 t idf

idft=1+log|D|dft

其中, |D| 是语料库中的document总数 。加1是为了不让出现在所有document中的单词被完全忽略,即 idf0

有时候为了防止除零,也用一种分子分母都加一的公式计算,在代码中只要另参数smooth_idf=True。即假设有一个document包含了所有的terms:

idft=1+log|D|+1dft+1

注意,在一般的教材中idf并不是像上面那样被定义的,而是:

idft=log|D|dft+1

TF-IDF

tf-idf 表示TF乘上IDF。这是信息检索中常用的一种term weighting, 在document classification中也很常见。

tf-idf计算式如下:

tfidfd,t=tfd,tidft,

一般计算完后还会对tf-idf做L1或L2的标准化。

n-gram

1-gram 即 unigram: 本质是一个词出现的概率 p(wi)
2-gram 即 bigram: 本质是一个词出现的概率 p(wi1wi)
3-gram 即 trigram: 同理

TfidfVectorizer

sklearn中的一个类

example:

from sklearn.feature_extraction.text import TfidfVectorizer

X_train = ['This is the first document.', 'This is the second document.']
X_test = ['This is the third document.']
vectorizer = TfidfVectorizer()
# 用X_train数据来fit
vectorizer.fit(X_train)
# 得到tfidf的矩阵
tfidf_train = vectorizer.transform(X_train)
tfidf_test = vectorizer.transform(X_test)

tfidf_train.toarray()

transform()函数返回的矩阵的储存形式是稀疏矩阵。
可以用toarray()函数得到一个ndarray类型的完整矩阵。

TfidfVectorizer构造时的一些常用的参数:

  • max_df, min_df: 在建立单词表的时候会取df在[min_df, max_df]区间内的单词。使用整数时,表示单词出现的document个数,使用浮点数时,表示出现的document个数再除以总的document个数(即频率)。
  • ngram_range: 取ngram的范围。

猜你喜欢

转载自blog.csdn.net/techmonster/article/details/74905668