【NLP实践-Task3 特征选择】TF-IDF&互信息

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

目录

TF-IDF原理

TF-IDF代码

方法1:使用TfidfTransformer

方法2:使用TfidfVectorizer(推荐)

互信息的原理

点互信息PMI

互信息MI

对特征矩阵使用互信息进行特征筛选

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平滑后的公式之一为:

            

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值