当前位置:   article > 正文

Scikit-learn CountVectorizer与TfidfVectorizer_在训练集上使用countvectorizer或tfidfvectorizer构建词表,并自定义多个参

在训练集上使用countvectorizer或tfidfvectorizer构建词表,并自定义多个参数以优

本文主要介绍两个类的基本使用,CountVectorizer与TfidfVectorizer,这两个类都是特征数值计算的常见方法。对于每一个训练文本,CountVectorizer只考虑每种词汇在该训练文本中出现的频率,而TfidfVectorizer除了考量某一词汇在当前训练文本中出现的频率之外,同时关注包含这个词汇的其它训练文本数目的倒数。相比之下,训练文本的数量越多,TfidfVectorizer这种特征量化方式就更有优势。

  1. #python2.7 sklearn version 0.18.1
  2. from sklearn.feature_extraction.text import CountVectorizer
  3. X_test = ['I sed about sed the lack',
  4. 'of any Actually']
  5. count_vec=CountVectorizer(stop_words=None)
  6. print count_vec.fit_transform(X_test).toarray()
  7. print '\nvocabulary list:\n\n',count_vec.vocabulary_
  8. >>
  9. >>
  10. [[1 0 0 1 1 0 2 1]
  11. [0 1 1 0 0 1 0 0]]
  12. (0, 4) 1
  13. (0, 7) 1
  14. (0, 0) 1
  15. (0, 6) 2
  16. (0, 3) 1
  17. (1, 1) 1
  18. (1, 2) 1
  19. (1, 5) 1
  20. vocabulary list:
  21. {u'about': 0, u'i': 3, u'of': 5, u'lack': 4, u'actually': 1, u'sed': 6, u'the': 7, u'any': 2}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

关于上面的代码,有几点说明: 
(1)第6行代码中,stop_words=None表示不去掉停用词,若改为stop_words=’english’则去掉停用词(** 
**); 
(2)第12,13行,分别是X_test中,两段文本的词频统计结果; 
(3)第15-22行,是稀疏矩阵的表示方式; 
(4)CountVectorizer同样适用于中文

  1. # -*- coding: utf-8 -*-
  2. from sklearn.feature_extraction.text import CountVectorizer
  3. X_test = [u'没有 你 的 地方 都是 他乡',u'没有 你 的 旅行 都是 流浪']
  4. count_vec=CountVectorizer(token_pattern=r"(?u)\b\w\w+\b")
  5. print count_vec.fit_transform(X_test).toarray()
  6. print count_vec.fit_transform(X_test)
  7. print '\nvocabulary list:\n'
  8. for key,value in count_vec.vocabulary_.items():
  9. print key,value
  10. >>
  11. >>
  12. [[1 1 0 1 0 1]
  13. [0 0 1 1 1 1]]
  14. (0, 0) 1
  15. (0, 5) 1
  16. (0, 1) 1
  17. (0, 3) 1
  18. (1, 4) 1
  19. (1, 2) 1
  20. (1, 5) 1
  21. (1, 3) 1
  22. vocabulary list:
  23. 他乡 0
  24. 地方 1
  25. 旅行 2
  26. 没有 3
  27. 都是 5
  28. 流浪 4
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

2.sklearn.feature_extraction.text.TfidfVectorizer 

2.1 tf-idf

首先介绍一下如何计算tf-idf,并且需要明确的是tf-idf=tf*idf,也就是说tf与idf分别是两个不同的东西。其中tf为谋个训练文本中,某个词的出现次数,即词频(Term Frequency);idf为逆文档频率(Inverse Document Frequency),对于词频的权重调整系数。

其中:

考虑到文章有长短之分,为了便于不同文章的比较,进行”词频”标准化。 

如果一个词越常见,那么分母就越大,逆文档频率就越小越接近0。分母之所以要加1,是为了避免分母为0(即所有文档都不包含该词)。log表示对得到的值取对数。

假定某训练文本长度为1000个词,”中国”、”蜜蜂”、”养殖”各出现20次,则这三个词的”词频”(TF)都为0.02。然后,搜索Google发现,包含”的”字的网页共有250亿张,假定这就是中文网页总数(即总样本数)。包含”中国”的网页共有62.3亿张,包含”蜜蜂”的网页为0.484亿张,包含”养殖”的网页为0.973亿张。则它们的逆文档频率(IDF)和TF-IDF如下:

NULL包含该词的文档数(亿)TFIDFTF-IDF
中国62.30.20.6030.0121
蜜蜂0.4840.22.7130.0543
养殖0.9730.22.4100.0482

如: 

从上表可见,”蜜蜂”的TF-IDF值最高,”养殖”其次,”中国”最低。所以,如果只选择一个词,”蜜蜂”就是这篇文章的关键词。

2.2 TfidfVectorizer

参数表作用
stop_words停用词表;自定义停用词表
token_pattern过滤规则;
属性表作用
vocabulary_词汇表;字典型
idf_返回idf值
stop_words_返回停用词表
方法表作用
fit_transform(X)拟合模型,并返回文本矩阵
  1. # -*- coding: utf-8 -*-
  2. from sklearn.feature_extraction.text import TfidfVectorizer
  3. X_test = ['没有 你 的 地方 都是 他乡','没有 你 的 旅行 都是 流浪']
  4. stopword = [u'都是'] #自定义一个停用词表,如果不指定停用词表,则默认将所有单个汉字视为停用词;但可以设token_pattern=r"(?u)\b\w+\b",即不考虑停用词
  5. tfidf=TfidfVectorizer(token_pattern=r"(?u)\b\w\w+\b",stop_words=stopword)
  6. weight=tfidf.fit_transform(X_test).toarray()
  7. word=tfidf.get_feature_names()
  8. print 'vocabulary list:\n'
  9. for key,value in tfidf.vocabulary_.items():
  10. print key,value
  11. print 'IFIDF词频矩阵:\n'
  12. print weight
  13. for i in range(len(weight)): # 打印每类文本的tf-idf词语权重,第一个for遍历所有文本,第二个for便利某一类文本下的词语权重
  14. print u"-------这里输出第", i, u"类文本的词语tf-idf权重------"
  15. for j in range(len(word)):
  16. print word[j], weight[i][j]#第i个文本中,第j个次的tfidf值
  17. >>
  18. >>
  19. vocabulary list:
  20. 没有 3
  21. 他乡 0
  22. 地方 1
  23. 旅行 2
  24. 流浪 4
  25. IFIDF词频矩阵:
  26. [[ 0.6316672 0.6316672 0. 0.44943642 0. ]
  27. [ 0. 0. 0.6316672 0.44943642 0.6316672 ]]
  28. -------第 0 类文本的词语tf-idf权重------
  29. 他乡 0.631667201738
  30. 地方 0.631667201738
  31. 旅行 0.0
  32. 没有 0.449436416524
  33. 流浪 0.0
  34. -------第 1 类文本的词语tf-idf权重------
  35. 他乡 0.0
  36. 地方 0.0
  37. 旅行 0.631667201738
  38. 没有 0.449436416524
  39. 流浪 0.631667201738
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/47444
推荐阅读
相关标签
  

闽ICP备14008679号