当前位置:   article > 正文

tfidf_特征选择_互信息__tf-idf 特征选择

tf-idf 特征选择

- 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

  1. from sklearn.feature_extraction.text import TfidfTransformer
  2. from sklearn.feature_extraction.text import CountVectorizer
  3. corpus=["我们 是 天使 的 爸爸 美女","美女 你们 天使 是 天使 的 孩子","美女 你们 做为 恶魔 不会 心痛 嘛","美女 天使 和 恶魔 的 区别 是 什么"]
  4. vectorizer=CountVectorizer()
  5. tranformer=TfidfTransformer()
  6. tfidf=tranformer.fit_transform(vectorizer.fit_transform(corpus))
  7. print(tfidf)
  8. x=zip(vectorizer.get_feature_names(),range(0,len(vectorizer.get_feature_names())))
  9. print(list(x))

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

  1. from sklearn.feature_extraction.text import TfidfVectorizer
  2. tfidf2=TfidfVectorizer()
  3. re=tfidf2.fit_transform(corpus)
  4. print(re)

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

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

- 互信息原理, 特征筛选

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

  1. from sklearn import metrics as mr
  2. label=[1,1,1,1,1,0,0,0,0]
  3. x1=["x","x","x","x","x","y","y","y","y"]
  4. x2=["x","x","x","y","y","y","y","x","x"]
  5. x3=["x","x","x","x","x","y","y","y","y"]
  6. x4=["x","x","x","x","y","y","y","y","y"]
  7. res1=mr.mutual_info_score(label,x1)
  8. res2=mr.mutual_info_score(label,x2)
  9. res3=mr.mutual_info_score(label,x3)
  10. res4=mr.mutual_info_score(label,x4)
  11. print(res1)
  12. print(res2)
  13. print(res3)
  14. print(res4)
  15. print("---------------")
  16. res1_4=mr.mutual_info_score(x1,x4)
  17. res1_3=mr.mutual_info_score(x1,x3)
  18. res1_2=mr.mutual_info_score(x1,x2)
  19. print(res1_4)
  20. print(res1_3)
  21. 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

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/239119
推荐阅读
相关标签
  

闽ICP备14008679号