参考:https://blog.csdn.net/du_qi/article/details/51564303

https://blog.csdn.net/m0_37324740/article/details/79411651

一:

CountVectorizer 类会将文本中的词语转换为词频矩阵。也就是通过分词后将所有的文档中的全部词作为一个字典(就是类似于新华字典这种)。然后将每一行的词用0,1矩阵来表示。并且每一行的长度相同,长度为字典的长度,在词典中存在,置为1,否则,为0。

代码如下:

from sklearn.feature_extraction.text import CountVectorizervectorizer = CountVectorizer(min_df=1)corpus = [      'This is the first document.','This is the second second document.','And the third one.','Is this the first document?',]
X = vectorizer.fit_transform(corpus)
feature_name = vectorizer.get_feature_names()print (X)
print (feature_name)
print (X.toarray())

输出结果为:

   (0, 1)        1(0, 2)        1(0, 6)        1(0, 3)        1(0, 8)        1(1, 5)        2(1, 1)        1(1, 6)        1(1, 3)        1(1, 8)        1(2, 4)        1(2, 7)        1(2, 0)        1(2, 6)        1(3, 1)        1(3, 2)        1(3, 6)        1(3, 3)        1(3, 8)        1
['and', 'document', 'first', 'is', 'one', 'second', 'the', 'third', 'this']
[[0 1 1 ..., 1 0 1][0 1 0 ..., 1 0 1][1 0 0 ..., 1 1 0][0 1 1 ..., 1 0 1]]

由于大部分文本都只会用词汇表中很少一部分的词,因此词向量中有大量的0,也就是说词向量是稀疏的。因此在实际应用中一般使用稀疏矩阵来存储。

二:

TfidfVectorizer()类

TF-IDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。TF-IDF实际上是:TF * IDF。

第一种方法是在用 CountVectorizer 类向量化之后再调用 TfidfTransformer 类进行预处理。第二种方法是直接用 TfidfVectorizer 完成向量化与 TF-IDF 预处理。

1 CountVectorizer 结合 TfidfTransformer

依旧用上面的文本,实现如下:

from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.feature_extraction.text import CountVectorizer corpus = [          'This is the first document.','This is the second second document.','And the third one.','Is this the first document?',]vectorizer=CountVectorizer()transformer = TfidfTransformer()
tfidf = transformer.fit_transform(vectorizer.fit_transform(corpus))
print (tfidf)

输出结果为:

  (0, 8)        0.438776742859(0, 3)        0.438776742859(0, 6)        0.358728738248(0, 2)        0.541976569726(0, 1)        0.438776742859(1, 8)        0.272301467523(1, 3)        0.272301467523(1, 6)        0.222624292325(1, 1)        0.272301467523(1, 5)        0.853225736145(2, 6)        0.28847674875(2, 0)        0.552805319991(2, 7)        0.552805319991(2, 4)        0.552805319991(3, 8)        0.438776742859(3, 3)        0.438776742859(3, 6)        0.358728738248(3, 2)        0.541976569726(3, 1)        0.438776742859

2 用 TfidfVectorizer

实现代码如下:

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

输出结果为:

  (0, 8)        0.438776742859(0, 3)        0.438776742859(0, 6)        0.358728738248(0, 2)        0.541976569726(0, 1)        0.438776742859(1, 8)        0.272301467523(1, 3)        0.272301467523(1, 6)        0.222624292325(1, 1)        0.272301467523(1, 5)        0.853225736145(2, 6)        0.28847674875(2, 0)        0.552805319991(2, 7)        0.552805319991(2, 4)        0.552805319991(3, 8)        0.438776742859(3, 3)        0.438776742859(3, 6)        0.358728738248(3, 2)        0.541976569726(3, 1)        0.438776742859

(1)CountVectorizer

class sklearn.feature_extraction.text.CountVectorizer(input='content', encoding='utf-8', decode_error='strict', strip_accents=None, lowercase=True, preprocessor=None, tokenizer=None, stop_words=None, token_pattern='(?u)\b\w\w+\b', ngram_range=(1, 1), analyzer='word', max_df=1.0, min_df=1, max_features=None, vocabulary=None, binary=False, dtype=<class 'numpy.int64'>)
(分为三个处理步骤:preprocessing、tokenizing、n-grams generation)
参数:(一般要设置的参数是decode_error,stop_words='english',token_pattern='...'(重要参数),max_df,min_df,max_features)
input:一般使用默认即可,可以设置为"filename'或'file',尚不知道其用法
encodeing:使用默认的utf-8即可,分析器将会以utf-8解码raw document
decode_error:默认为strict,遇到不能解码的字符将报UnicodeDecodeError错误,设为ignore将会忽略解码错误,还可以设为replace,作用尚不明确
strip_accents:默认为None,可设为ascii或unicode,将使用ascii或unicode编码在预处理步骤去除raw document中的重音符号
analyzer:一般使用默认,可设置为string类型,如'word', 'char', 'char_wb',还可设置为callable类型,比如函数是一个callable类型
preprocessor:设为None或callable类型
tokenizer:设为None或callable类型
ngram_range:词组切分的长度范围,详细用法见http://scikit-learn.org/stable/modules/feature_extraction.html#text-feature-extraction中4.2.3.4上方第三个框
stop_words:设置停用词,设为english将使用内置的英语停用词,设为一个list可自定义停用词,设为None不使用停用词,设为None且max_df∈[0.7, 1.0)将自动根据当前的语料库建立停用词表
lowercase:将所有字符变成小写
token_pattern:表示token的正则表达式,需要设置analyzer == 'word',默认的正则表达式选择2个及以上的字母或数字作为token,标点符号默认当作token分隔符,而不会被当作token
max_df:可以设置为范围在[0.0 1.0]的float,也可以设置为没有范围限制的int,默认为1.0。这个参数的作用是作为一个阈值,当构造语料库的关键词集的时候,如果某个词的document frequence大于max_df,这个词不会被当作关键词。如果这个参数是float,则表示词出现的次数与语料库文档数的百分比,如果是int,则表示词出现的次数。如果参数中已经给定了vocabulary,则这个参数无效
min_df:类似于max_df,不同之处在于如果某个词的document frequence小于min_df,则这个词不会被当作关键词
max_features:默认为None,可设为int,对所有关键词的term frequency进行降序排序,只取前max_features个作为关键词集
vocabulary:默认为None,自动从输入文档中构建关键词集,也可以是一个字典或可迭代对象?
binary:默认为False,一个关键词在一篇文档中可能出现n次,如果binary=True,非零的n将全部置为1,这对需要布尔值输入的离散概率模型的有用的
dtype:使用CountVectorizer类的fit_transform()或transform()将得到一个文档词频矩阵,dtype可以设置这个矩阵的数值类型

属性:
vocabulary_:字典类型,key为关键词,value是特征索引,样例如下:
com.furiousapps.haunt2: 57048
bale.yaowoo: 5025
asia.share.superayiconsumer: 4660
com.cooee.flakes: 38555
com.huahan.autopart: 67364
关键词集被存储为一个数组向量的形式,vocabulary_中的key是关键词,value就是该关键词在数组向量中的索引,使用get_feature_names()方法可以返回该数组向量。使用数组向量可验证上述关键词,如下:
ipdb> count_vec.get_feature_names()[57048]
u'com.furiousapps.haunt2'
ipdb> count_vec.get_feature_names()[5025]
u'bale.yaowoo'

stop_words_:集合类型,官网的解释十分到位,如下:
    Terms that were ignored because they either:
            occurred in too many documents (max_df)
            occurred in too few documents (min_df)
            were cut off by feature selection (max_features).
    This is only available if no vocabulary was given.
这个属性一般用来程序员自我检查停用词是否正确,在pickling的时候可以设置stop_words_为None是安全的

(2)TfidfVectorizer

class sklearn.feature_extraction.text.TfidfVectorizer(input='content', encoding='utf-8', decode_error='strict', strip_accents=None, lowercase=True, preprocessor=None, tokenizer=None, analyzer='word', stop_words=None, token_pattern='(?u)\b\w\w+\b', ngram_range=(1, 1), max_df=1.0, min_df=1, max_features=None, vocabulary=None, binary=False, dtype=<class 'numpy.int64'>, norm='l2', use_idf=True, smooth_idf=True, sublinear_tf=False)

TfidfVectorizer与CountVectorizer有很多相同的参数,下面只解释不同的参数

binary:默认为False,tf-idf中每个词的权值是tf*idf,如果binary设为True,所有出现的词的tf将置为1,TfidfVectorizer计算得到的tf与CountVectorizer得到的tf是一样的,就是词频,不是词频/该词所在文档的总词数。

norm:默认为'l2',可设为'l1'或None,计算得到tf-idf值后,如果norm='l2',则整行权值将归一化,即整行权值向量为单位向量,如果norm=None,则不会进行归一化。大多数情况下,使用归一化是有必要的。

use_idf:默认为True,权值是tf*idf,如果设为False,将不使用idf,就是只使用tf,相当于CountVectorizer了。

smooth_idf:idf平滑参数,默认为True,idf=ln((文档总数+1)/(包含该词的文档数+1))+1,如果设为False,idf=ln(文档总数/包含该词的文档数)+1

sublinear_tf:默认为False,如果设为True,则替换tf为1 + log(tf)。

CountVectorize和TfidVectorizer实例及参数详解相关推荐

  1. 阿里云AMD服务器计算型c6a和通用型g6a实例性能参数详解

    阿里云服务器AMD实例专场性能更强,基于x86架构自研神龙芯片,虚拟化损耗为0,活动包括AMD计算型c6a和通用型g6a,云服务器配置2核4G.4核8G.2核8G1年和4核16G,AMD服务器网来详细 ...

  2. 阿里云AMD服务器ECS实例g6a、c6a和r6a性能参数详解

    阿里云AMD服务器ECS计算型c6a.通用型g6a和内存型r6a实例,CPU采用2.6GHz主频的AMD EPYCTM ROME处理器,睿频3.3GHz,计算性能稳定,云服务器吧来详细说下阿里云ECS ...

  3. catboost原理、参数详解及python实例

    catboost 简介 优点: 1)它自动采用特殊的方式处理类别型特征(categorical features).首先对categorical features做一些统计,计算某个类别特征(cate ...

  4. 阿里云ARM服务器通用型g6r实例CPU性能参数详解

    查看全文 http://www.taodudu.cc/news/show-2713373.html 相关文章: oracle profile 参数,oracle profile的参数详解 CPU各项参 ...

  5. 最详细的Catboost参数详解与实例应用

    集成学习的两大准则:基学习器的准确性和多样性. 算法:串行的Boosting和并行的Bagging,前者通过错判训练样本重新赋权来重复训练,来提高基学习器的准确性,降低偏差!后者通过采样方法,训练出多 ...

  6. spring boot 实战 / 可执行war启动参数详解

    概述   上一篇文章<spring boot 实战 / mvn spring-boot:run 参数详解>主要讲解了spring boot 项目基于maven插件启动过程中借助profil ...

  7. Lesson 8.1Lesson 8.2 决策树的核心思想与建模流程CART分类树的建模流程与sklearn评估器参数详解

    Lesson 8.1 决策树的核心思想与建模流程 从本节课开始,我们将介绍经典机器学习领域中最重要的一类有监督学习算法--树模型(决策树). 可此前的聚类算法类似,树模型也同样不是一个模型,而是一类模 ...

  8. 系列 《使用sklearn进行集成学习——理论》 《使用sklearn进行集成学习——实践》 目录 1 Random Forest和Gradient Tree Boosting参数详解 2 如何调参?

    系列 <使用sklearn进行集成学习--理论> <使用sklearn进行集成学习--实践> 目录 1 Random Forest和Gradient Tree Boosting ...

  9. Retrofit 注解参数详解

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/121000230 本文出自[赵彦军的博客] 系列文章推荐: Android Flow ...

最新文章

  1. 2022-2028年中国软件测试行业市场研究及前瞻分析报告
  2. .idea文件夹是做什么的_33 个 IDEA 最牛配置,写代码太爽了!
  3. 粉丝福利,送10个程序员专用机械键盘
  4. 06jQuery-06-AJAX
  5. 【Siddhi】DefinitionNotExistException: Stream with stream ID xxx has not been defined
  6. java string.format_如果性能很重要,我应该使用Java的String.format()吗?
  7. sql azure 语法_在Azure中使用SQL Server 2016 CTP3
  8. The new year,new mood,new plan~~
  9. 高级IO(一)--UNIX环境高级编程读书笔记
  10. 【拯救赵明】UTM解决网络安全大问题
  11. 【转】Nodejs链接Mysql批量添加 insert into
  12. C++ STL 源码剖析之 Traits 编程技法
  13. python实现图书借阅管理系统
  14. fNIRS近红外数据处理过程
  15. 标准时钟系统(体育场馆时钟同步系统)京准电子
  16. Java Web实训项目:西蒙购物网1
  17. faker假数据php,php faker 伪造数据
  18. 恶意访问网站的策略处理,IP访问限制
  19. 单片机八灯交替闪烁c语言代码,单片机闪烁灯汇编语言源代码大全(四款闪烁灯的汇编语言源代码)...
  20. OPC UA IO模块对工业物联网的影响

热门文章

  1. python制作图片数据集 h5py_python库——h5py入门讲解
  2. 浅谈航飞重叠度,利用小工具计算大疆精灵、M300、垂起固定翼航飞重叠度——拒绝航飞空洞
  3. 中国云谷串起大数据产业链
  4. 2021年全球与中国飞机千斤顶行业市场规模及发展前景分析
  5. 自媒体矩阵搭建教程!
  6. linux建立分区,介绍Linux硬盘系统建立分区步骤
  7. 关于正交变换和正交矩阵
  8. usb转虚拟网卡流程
  9. 大学计算机基础的教案,《大学计算机基础》教案.docx
  10. 计算机病毒教案 大学,计算机病毒教案版本