文本特征提取算法-TF-IDF

TF-IDF算法原理及其使用详解

  • TF-IDF
  • sklearn实现

TF-IDF

TF-IDF(Term Frequency-inverse Document Frequency)是一种针对关键词的统计分析方法。用于评估一个词对一个文件集或者一个语料库的重要程度。一个词的重要程度跟它在文章中出现的次数成正比,跟它在语料库出现的次数成反比。这种计算方式能有效避免常用词对关键词的影响,提高了关键词与文章之间的相关性。

其中TF(Term Frequency)指的是某词在文章中出现的总次数,该指标通常会被归一化定义为

TF=(某词在文档中出现的次数/文档的总词量)

这样可以防止结果偏向过长的文档(同一个词语在长文档里通常会具有比短文档更高的词频)。

IDF(inverse Document Frequency)逆向文档频率,主要用于降低所有文档中一些常见却对文档影响不大的词语的作用。IDF反应了一个词在所有文本中出现的频率,如果一个词在很多的文本中出现,那么它的IDF值应该低,而反过来如果一个词在比较少的文本中出现,那么它的IDF值应该高。包含某词语的文档越少,IDF值越大,说明该词语具有很强的区分能力,

IDF=loge(语料库中文档总数/包含该词的文档数+1)

+1的原因是避免分母为0

TF-IDF=TFxIDF
TF-IDF值越大表示该特征词对这个文本的重要性越大。

sklearn实现

from sklearn.feature_extraction.text import TfidfVectorizer
corpus = [
    'This is the first document.',
    'This document is the second document.',
    'And this is the third one.',
    'Is this the first document?',
]
vectorizer = TfidfVectorizer()
tdm = vectorizer.fit_transform(corpus)
space = vectorizer.vocabulary_
print(space)

参数解释:

vocabulary_:特征和特征在TD-IDF中位置的一个对应关系,比如上例中vocabulary_的输出为,可以看出每个特征词和TD-IDF矩阵列的对应关系:

stop_words:停用词集合,当为'english'时,ENGLISH_STOP_WORDS中定义的词会被忽略,如果为list,list中的单词即为要忽略的词;

max_df: 设定当某个词超过一个df(document frequency)的上限时就忽略该词。当为0~1的float时表示df的比例,当为int时表示df数量;

get_feature_names():返回特征列表,接上例vectorizer.get_feature_names()返回结果

fit:load数据,并计算tf-idf值;

transform:将数据转化为matrix的形式;

fit_transform:load数据并将数据转化为matrix形式,等于fit+trasform;

你可能感兴趣的:(推荐系统,NLP,机器学习,大数据,python)