当前位置: 首页 > news >正文

如何对文档进行分类

朴素贝叶斯分类意识和的场景就是文本分类情感分析和垃圾邮件识别。其中情感分析和垃圾文件识别都是通过文本进行判断。所以朴素贝叶斯常用于自然语言处理NLP的工具.

sklearn机器学习包

sklearn(Scikit-learn),它给我们提供了3个朴素贝叶斯分类算法,分别是高斯朴素贝叶斯(GassianNB)、多项式朴素贝叶斯(MultinomialNB)和伯努利朴素贝叶斯(BernoulliNB)
**高斯朴素贝叶斯:**特征变量是连续的,符合高斯分布,例如人的升高,物体的长度。
**多项式朴素贝叶斯:**特征变量是离散的变量,符合多项式,在文档分类中特征变量体现在一个单词出现的次数,或者是单词的TF-IDF值等。
**伯努利朴素贝叶斯:**特征变量是布尔变量,符合0/1分布,在文档分类中特征单词是否出现。

TF-IDF

TF:词频,计算一个单词在文档中出现的次数,他认为一个单词的重要性和他在文档中出现的呈正比。
IDF:你想文档频率IDF,是指一个单词在文档中的区分度,他认为一个单词出现在文档越少,越能通过这个单词把该文档和其他文档区分开。

应用

documents = [
    'this is the bayes document',
    'this is the second second document',
    'and the third one',
    'is this the document'
]
tfidf_matrix = tfidf_vec.fit_transform(documents)

输出代码中不重复的词


print('不重复的词:', tfidf_vec.get_feature_names())

输出每个单词对应的id


print('每个单词的ID:', tfidf_vec.vocabulary_)

输出每个单词在每个文档中的TF-IDF值


print('每个单词的tfidf值:', tfidf_matrix.toarray())

向量里的顺序是按照词语的id顺序来的

对文档进行分词

英文分词常用包:nltk,包含常用的英文停用词,stop words 分词和标注方法
中文分词常用包:jieba,包含常用的中文停用词和stop words和分词方法。

加载停用词表

需要在网上下载常用的中文停用词表,存在stop-words.txt,然后利用python文件读取,保存在列表中。

stop_words = [line.strip().decode('utf-8') for line in io.open('stop_words.txt').readlines()]

计算单词的权重

使用sklearn里的TfidVectorizer类,直接使用他的fit_transform方法进行合成,得到TF-IDF空间特性features,你可以理解为选出来的分词就是特征,并且得到特征空间features.

tf = TfidfVectorizer(stop_words=stop_words, max_df=0.5)
features = tf.fit_transform(train_contents)

这里Max_df=0.5,代表一个单词在文章中出现了百分之50,那么他只携带了非常少量小的信息,因此不作为分词统计。
并且一般很少设置min_df,因为min_df通常会显示很小

生成朴素贝叶斯分类器

将特征空间train_features,以及训练及对应的分类train-labels传递给贝叶斯分类器clf,他会自动生成一个符合特征空间和对饮分类器。


# 多项式贝叶斯分类器
from sklearn.naive_bayes import MultinomialNB  
clf = MultinomialNB(alpha=0.001).fit(train_features, train_labels)

使用分类器做预测

首先我们需要得到测试集的特征矩阵。
具体的方法是用训练集合的分词创建一个tfidVectorizer类,使用同样的stop_words和max_df,然后用这个类对测试机进行拟合。

test_tf = TfidfVectorizer(stop_words=stop_words, max_df=0.5, vocabulary=train_vocabulary)
test_features=test_tf.fit_transform(test_contents)

然后我们用训练好的分类器对新数据做预测。

predicted_labels=clf.predict(test_features)

计算准确率

调用sklearn中的metrics包进行准确率计算

from sklearn import metrics
print metrics.accuracy_score(test_labels, predicted_labels)

相关文章:

  • 分子骨架跃迁工具DiffLinker评测
  • Docker容器——harbor私有仓库部署与管理
  • MYSQL必知必会笔记:第十一章使用数据处理函数
  • GC IOS Client教程(详细版)
  • 12款开源数据资产(元数据)管理平台选型分析(一)
  • Node.js入门:Buffer对象学习
  • Spring Cloud Alibaba Sentinel 简介与入门
  • 「自控元件及线路」3.2 三相、两相、单相异步电动机
  • Java高手速成 | JSP的MVC模式
  • 把次卧整出来当办公室
  • MYSQL必知必会笔记:第十二章汇总数据
  • 多线程第三讲
  • 寄存器和移位寄存器分析与建模
  • Learning C++ No.4【类和对象No.3】
  • 详解视觉BEV3D检测模型: Fast-BEV: A Fast and Strong Bird‘s-Eye View Perception Baseline
  • PMT有两种基本模式――单光子计数和电流感应选择
  • 格式化并挂载ubi文件系统过程详解
  • 自由概率(Free probability)
  • 大数据之HBase基础
  • Python爬虫教你爬取视频信息
  • 电加热油锅炉工作原理_电加热导油
  • 大型电蒸汽锅炉_工业电阻炉
  • 燃气蒸汽锅炉的分类_大连生物质蒸汽锅炉
  • 天津市维修锅炉_锅炉汽化处理方法
  • 蒸汽汽锅炉厂家_延安锅炉厂家
  • 山西热水锅炉厂家_酒店热水 锅炉
  • 蒸汽锅炉生产厂家_燃油蒸汽发生器
  • 燃煤锅炉烧热水_张家口 淘汰取缔燃煤锅炉
  • 生物质锅炉_炉
  • 锅炉天然气_天燃气热风炉