与你诶 2023-04-24 00:06 采纳率: 33.3%
浏览 21
已结题

CountVectorizer()函数初始化词袋模型

使用Scikit-learn的CountVectorizer()函数初始化词袋模型时,设置不同的特征个数生成邮件的特征表示向量,比较训练分类模型所耗费的时间,以及分类模型分类的准确性。特征个数越多是否意味分类性能越好?
数据集为mailcorpus.txt

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-04-24 02:06
    关注
    • 建议你看下这篇博客👉 :Scikit Learn CountVectorizer 入门实例
    • 除此之外, 这篇博客: 词袋模型和CountVectorizer类详解中的 词袋模型 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 词袋模型(英语:Bag-of-words model)是个在自然语言处理和信息检索(IR)下被简化的表达模型。此模型下,一段文本(比如一个句子或是一个文档)可以用一个装着这些词的袋子来表示,这种表示方式不考虑文法以及词的顺序。词袋模型本质是一种用机器学习算法对文本进行建模时表示文本数据的方法,也是 ngram 中的 unigram。

      词袋模型的三部曲

      • 分词(tokenizing)
      • 统计修订词特征值(counting)
      • 标准化(normalizing)

      中文文本需要进行分词处理,这里用英文语料,极大地简化分词步骤。调用 scikit-learn 的 CountVectorizer 类来进行文本的词频统计与向量化。

      from sklearn.feature_extraction.text import CountVectorizer  
      vectorizer=CountVectorizer()
      corpus=["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"] 
      

      调用相关函数查看 CountVectorizer 类怎样进行词频统计和向量化

      • vectorizer.fit_transform(corpus)

      Learn the vocabulary dictionary and return term-document matrix.

      学习词典并且返回文档中的词对应的词向量矩阵

      • vectorizer.fit_transform(corpus).toarray()

      所有词组成一个向量,每个位置的数字表示这个位置对应的单词在这句话中出现的次数

      • vectorizer.get_feature_names()

      从索引值到特征名(每个单词)的映射

      print(vectorizer.fit_transform(corpus))
      # 部分结果
      # (0, 4)        1    # 0表示第一个文档,4表示come的索引,1表示出现的次数(I为停用词)
      # (0, 15)       2    # 0表示第一个文档,15表示to的索引,2表示出现的次数(I为停用词)
      # (0, 3)        1
      # (0, 16)       1
      
      print(vectorizer.fit_transform(corpus).toarray())
      [[0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 2 1 0 0] # 从下面可以看出 come 对应索引位置为4上的'1'
       [0 0 1 1 0 1 1 0 0 1 0 0 0 0 1 0 0 0 0]
       [1 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0]
       [0 0 0 0 0 1 1 0 1 0 1 1 0 1 0 1 0 1 1]]
      
      print(vectorizer.get_feature_names())
      ['and', 'apple', 'car', 'china', 'come', 'in', 'is', 'love', 'papers', 'polupar', 'science', 'some', 'tea', 'the', 'this', 'to', 'travel', 'work', 'write']
      

      可以看到我们一共有19个词,所以4个文本都是19维的特征向量。而每一维的向量依次对应了下面的19个词。另外由于词"I"在英文中是停用词,不参加词频的统计。

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

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月29日
  • 修改了问题 4月24日
  • 创建了问题 4月24日

悬赏问题

  • ¥100 数字取证课程 关于FAT文件系统的操作
  • ¥15 如何使用js实现打印时每页设置统一的标题
  • ¥15 安装TIA PortalV15.1报错
  • ¥15 能把水桶搬到饮水机的机械设计
  • ¥15 Android Studio中如何把H5逻辑放在Assets 文件夹中以实现将h5代码打包为apk
  • ¥15 使用小程序wx.createWebAudioContext()开发节拍器
  • ¥15 关于#爬虫#的问题:请问HMDB代谢物爬虫的那个工具可以提供一下吗
  • ¥15 vue3+electron打包获取本地视频属性,文件夹里面有ffprobe.exe 文件还会报错这是什么原因呢?
  • ¥20 用51单片机控制急停。
  • ¥15 孟德尔随机化结果不一致