目录
sklearn.metrics.mutual_info_score
sklearn.feature_selection.mutual_info_classif
TF-IDF原理
TF-IDF是Term Frequency - Inverse Document Frequency的缩写,即“词频-逆文本频率”。它由两部分组成,TF和IDF。
TF(词频),即统计文本中各个词的出现频率,并作为文本特征,这个很好理解。
IDF,即“逆文本频率”。为方便理解,举例说明。
from sklearn.feature_extraction.text import CountVectorizer
vectorizer=CountVectorizer()
text=["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"]
# 文本的词频统计
print(vectorizer.fit_transform(text))
# 各个特征代表的词
print(vectorizer.get_feature_names())
# 每个文本的词向量特征
print(vectorizer.fit_transform(text).toarray())



在这个例子中,出现"to"的词频虽然高,但是重要性却应该比词频低的"China"和“Travel”要低。IDF就是来帮助我们来反应这个词的重要性的,进而修正仅仅用词频表示的词特征值。
概括来讲, IDF反应了一个词在所有文本中出现的频率,如果一个词在很多的文本中出现,那么它的IDF值应该低,比如上文中的“to”。而反过来如果一个词在比较少的文本中出现,那么它的IDF值应该高。比如一些专业的名词如“Machine Learning”。这样的词IDF值应该高。一个极端的情况,如果一个词在所有的文本中都出现,那么它的IDF值应该为0。IDF的定义如下:
IDF(x)=log(N/N(x))
其中,N代表语料库中文本的总数,而N(x)代表语料库中包含词x的文本总数。
为什么IDF的基本公式应该是上面这样,而不是像N/N(x)这样的形式呢?这就涉及到信息论相关的一些知识了。感兴趣的朋友建议阅读吴军博士的《数学之美》第11章。
上面的IDF公式已经可以使用了,但是在一些特殊的情况会有一些小问题,比如某一个生僻词在语料库中没有,这样我们的分母为0, IDF没有意义了。所以常用的IDF我们需要做一些平滑,使语料库中没有出现的词也可以得到一个合适的IDF值。平滑的方法有很多种,最常见的IDF平滑后的公式之一为:

本文详细介绍了TF-IDF算法原理及其实现方法,包括使用TfidfTransformer和TfidfVectorizer进行文本特征提取的过程。同时,文章深入探讨了点互信息PMI和互信息MI的概念及其在自然语言处理中的应用,最后给出了如何利用互信息进行特征筛选的具体实例。
最低0.47元/天 解锁文章
1165

被折叠的 条评论
为什么被折叠?



