tfidf_特征选择_互信息_

- tfidf原理,特征筛选

参考: https://www.jianshu.com/p/9b2eb69ab735

tiidf选择值更高的词作为句子的表达(作为特征),进而做分类任务或者相关度排序任务。那么值是什么值呢?tfidf其实是td与idf的操作。全称为term frequence - inverse document frequence,前者为某个单词在文档中出现的频率,后者为包含该单词的文档的频率   的倒数。用来拉低前者的值,很明显若每个文档都拥有或曾经出现某个词,那这个词很廉价,没有什么意思,需要筛掉,即让他的值低一些。

在tfidf的基础上,发展起来了BM25,对tfidf进行了一些优化。主要体现在词频的变化,已经句子等长度的归一化等。感觉改进版的tfidf与BM25已经很像了,不知道理解的对不对..

tfidf的使用,直接使用sklearn.feature_extraction.text import TfidfTransformer即可。或者先使用CounterVectorizer进行向量化。

参考代码: https://www.cnblogs.com/pinard/p/6693230.html

from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.feature_extraction.text import CountVectorizer

corpus=["我们 是 天使 的 爸爸 美女","美女 你们 天使 是 天使 的 孩子","美女 你们 做为 恶魔 不会 心痛 嘛","美女 天使 和 恶魔 的 区别 是 什么"]

vectorizer=CountVectorizer()

tranformer=TfidfTransformer()
tfidf=tranformer.fit_transform(vectorizer.fit_transform(corpus))

print(tfidf)

x=zip(vectorizer.get_feature_names(),range(0,len(vectorizer.get_feature_names())))
print(list(x))

结果如下,很明显看出对于每个文档来说,那些单词(特征)是重要,而哪些是不重要的,据此进行特征选择,做接下来的任务。


from sklearn.feature_extraction.text import TfidfVectorizer
tfidf2=TfidfVectorizer()
re=tfidf2.fit_transform(corpus)
print(re)

也可以直接使用TfidfVectorizer来进行直接计算。

另外 https://www.jianshu.com/p/f3b92124cd2b 包含了除sklearn之外,使用gensim进行tfidf计算的方法,以及使用python实现。使用的是原版的tfidf,没有对其做改进,即对tf进行log等操作。

- 互信息原理, 特征筛选

互信息中引申初了点互信息,前者是后者所有取值可能性的乘积与加和的操作。互信息反应了两个变量之间的相关度。如果两个变量之间相关度很高,认为有数据冗余,我们可以保留其中一个变量。


from sklearn import metrics as mr

label=[1,1,1,1,1,0,0,0,0]
x1=["x","x","x","x","x","y","y","y","y"]
x2=["x","x","x","y","y","y","y","x","x"]
x3=["x","x","x","x","x","y","y","y","y"]
x4=["x","x","x","x","y","y","y","y","y"]
res1=mr.mutual_info_score(label,x1)
res2=mr.mutual_info_score(label,x2)
res3=mr.mutual_info_score(label,x3)
res4=mr.mutual_info_score(label,x4)

print(res1)
print(res2)
print(res3)
print(res4)
print("---------------")
res1_4=mr.mutual_info_score(x1,x4)
res1_3=mr.mutual_info_score(x1,x3)
res1_2=mr.mutual_info_score(x1,x2)
print(res1_4)
print(res1_3)
print(res1_2)

如上图所示,假如将1,2,3,4分别看作是不同的特征,那么可以看出特征1和特征2相对于3,4来说是不相关的,在做任务时,如果只选择二维特征,则保留特征1和2.

参考: 

https://blog.csdn.net/u013710265/article/details/72848755

代码链接:https://github.com/mathCrazyy/NLP_task/tree/master/NLP_task3

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值