一、算法说明

  1. 为了便于计算类条件概率\(P(x|c)\),朴素贝叶斯算法作了一个关键的假设:对已知类别,假设所有属性相互独立。
  2. 当使用训练完的特征向量对新样本进行测试时,由于概率是多个很小的相乘所得,可能会出现下溢出,故对乘积取自然对数解决这个问题。
  3. 在大多数朴素贝叶斯分类器中计算特征向量时采用的都是词集模型,即将每个词的出现与否作为一个特征。而在该分类器中采用的是词袋模型,即文档中每个词汇的出现次数作为一个特征。
  4. 当新样本中有某个词在原训练词中没有出现过,会使得概率为0,故使用拉普拉斯平滑处理技术解决这一问题。对应公式如下:

二、数据源

在该模型中,所用到的训练数据和测试数据均来自于搜狗分类语料库,并选择了体育类、财经类和教育类这三种新闻的各40个样本,以作为该多分类器的输入数据。

三、中文分词

为了对文本完成分词,对于英文文本而言,只需要简单得利用str.split(" "),用空格对整个英文文本进行切割即可。而对于中文文本而言就相对复杂了点,因为在中文文本中,往往包含了中文、英文、数字、标点符号等多种字符,此外中文中常常是多个词组连接起来组成一个句子,所以也无法类似英文那样简单利用某个符号进行分割。为了完成中文文本的分词,使用了如下的文本过滤算法:

stopWords = open("stop_words.txt", encoding='UTF-8').read().split("\n")

def textParse(inputData):
import re
global stopWords
inputData = "".join(re.findall(u'[\u4e00-\u9fa5]+', inputData))
wordList = "/".join(jieba.cut(inputData))
listOfTokens = wordList.split("/")
return [tok for tok in listOfTokens if (tok not in stopWords and len(tok) >= 2)]
  1. 利用正则表达式u'[\u4e00-\u9fa5]+'过滤掉输入数据中的所有非中文字符;
  2. 在Python下,有个中文分词组件叫做jieba,可以很好得完成对中文文本的分词。在这里便是利用jieba中的cut函数"/".join(jieba.cut(inputData))完成对中文的分词,并且以“/”作为分隔符。
  3. 在中文文本中,存在在大量的停用词,这些停用词对于表示一个类别的特征没有多少贡献,因此必需过滤掉输入数据中的停用词。这里所用到的stop_words.txt ,包含了1598个停用词,利用tok not in stopWords过滤掉输入数据中的停用词。
  4. 在利用jieba完成分词后,往往会存在大量长度为1的词(不在停用词表里),这些词对特征表示同样贡献不大,利用len(tok) >= 2将其过滤掉。

通过以上过程,便完成了中文文本的分词。分词结果如下:

四、分类结果

为了对分类器的泛化误差进行评估,遂使用留存交叉验证法,即从输入的40 * 3共120个样本中,随机选中20个样本作为测试数据,其他100个样本作为训练数据,以此来测定泛化误差。

经过10次测试,得到分类器的泛化误差为:(0.1 + 0.0 + 0.1 + 0.1 = 0.0 + 0.05 + 0.1 + 0.15 + 0.1 + 0.25)/ 10 = 0.095,可见该中分多分类器在新样本上的表现还是很好的。其中部分分类结果如下所示:





【Coursera】基于朴素贝叶斯的中文多分类器的更多相关文章

  1. 详解基于朴素贝叶斯的情感分析及 Python 实现

    相对于「 基于词典的分析 」,「 基于机器学习 」的就不需要大量标注的词典,但是需要大量标记的数据,比如: 还是下面这句话,如果它的标签是: 服务质量 - 中 (共有三个级别,好.中.差) ╮(╯-╰ ...

  2. Java实现基于朴素贝叶斯的情感词分析

    朴素贝叶斯(Naive Bayesian)是一种基于贝叶斯定理和特征条件独立假设的分类方法,它是基于概率论的一种有监督学习方法,被广泛应用于自然语言处理,并在机器学习领域中占据了非常重要的地位.在之前 ...

  3. spark MLlib实现的基于朴素贝叶斯(NaiveBayes)的中文文本自动分类

    1.自动文本分类是对大量的非结构化的文字信息(文本文档.网页等)按照给定的分类体系,根据文字信息内容分到指定的类别中去,是一种有指导的学习过程. 分类过程采用基于统计的方法和向量空间模型可以对常见的文 ...

  4. R 基于朴素贝叶斯模型实现手机垃圾短信过滤

    # 读取数数据, 查看数据结构 df_raw <- read.csv("sms_spam.csv", stringsAsFactors=F) str(df_raw) leng ...

  5. 【sklearn朴素贝叶斯算法】高斯分布/多项式/伯努利贝叶斯算法以及代码实例

    朴素贝叶斯 朴素贝叶斯方法是一组基于贝叶斯定理的监督学习算法,其"朴素"假设是:给定类别变量的每一对特征之间条件独立.贝叶斯定理描述了如下关系: 给定类别变量\(y\)以及属性值向 ...

  6. 机器学习Matlab打击垃圾邮件的分类————朴素贝叶斯模型

    该系列来自于我<人工智能>课程回顾总结,以及实验的一部分进行了总结学习机 垃圾分类是有监督的学习分类最经典的案例,本文首先回顾了概率论的基本知识.则以及朴素贝叶斯模型的思想.最后给出了垃圾 ...

  7. NLP系列(4)_朴素贝叶斯实战与进阶

    作者: 寒小阳 && 龙心尘 时间:2016年2月. 出处:http://blog.csdn.net/han_xiaoyang/article/details/50629608 htt ...

  8. NLP系列(4)_朴素贝叶斯实战与进阶(转)

    http://blog.csdn.net/han_xiaoyang/article/details/50629608 作者: 寒小阳 && 龙心尘 时间:2016年2月. 出处:htt ...

  9. 数据算法 --hadoop/spark数据处理技巧 --(13.朴素贝叶斯 14.情感分析)

    十三.朴素贝叶斯 朴素贝叶斯是一个线性分类器.处理数值数据时,最好使用聚类技术(eg:K均值)和k-近邻方法,不过对于名字.符号.电子邮件和文本的分类,则最好使用概率方法,朴素贝叶斯就可以.在某些情况 ...

随机推荐

  1. 调试大叔V2.1.0(2018.12.17)|http/s接口调试、数据分析程序员辅助开发神器

    2018.12.17 - 调试大叔 V2.1.0*升级http通讯协议版本,完美解决Set-Cookie引起的系列问题:*新增Content-Type编码格式参数,支持保存(解决模拟不同网站或手机请求 ...

  2. springboot-web进阶(四)——单元测试

    一.概述 基础知识,参考:https://www.cnblogs.com/ysw-go/p/5447056.html 二.springboot的单元测试 1.入门测试类 最重要的不要忘记类上面的依赖, ...

  3. git push 每次都要输入用户名密码

    添加远程库的时候使用了https的方式..所以每次都要用https的方式push到远程库,速度还慢.. 查看使用的传输协议: git remote -v 重新设置成ssh的方式: git remote ...

  4. python基础学习1-字典的使用

    id_db={1:"wh" ,2:"wx" ,3:{1:"a",2:"b",3:"c"} ,4:[& ...

  5. 23-[模块]-subprocess模块

    1.调用系统命令 我们经常需要通过Python去执行一条系统命令或脚本,系统的shell命令是独立于你的python进程之外的,每执行一条命令,就是发起一个新进程,通过python调用系统命令或脚本的 ...

  6. 4 CRM-权限管理rbac、github代码

    1.引入权限组件rbac 1.settings配置app.中间件 INSTALLED_APPS = [ ... ... 'crm.apps.CrmConfig', "stark.apps.S ...

  7. 27-ATM+购物车程序

    1.需求 本章作业: 模拟实现一个ATM + 购物商城程序 额度 15000或自定义 实现购物商城,买东西加入 购物车,调用信用卡接口结账 可以提现,手续费5% 支持多账户登录 支持账户间转账 记录每 ...

  8. CF 1041 F. Ray in the tube

    F. Ray in the tube 链接 题意: 有两条平行于x轴的直线A,B,每条直线上的某些位置有传感器.你需要确定A,B轴上任意两个整点位置$x_a$,$x_b$,使得一条光线沿$x_a→x_ ...

  9. 2_C语言中的数据类型 (九)逻辑运算符与if语句、switch、条件运算符?、goto语句与标号

    1          条件分支语句 1.1       关系运算符 在C语言中0代表false,非0代表真 1.1.1          < 小于 1.1.2          <= 小于 ...

  10. [Luogu4921]情侣?给我烧了![错位排列]

    题意 题意很清楚 \滑稽 分析 对于每一个询问 \(k\) ,记 \(g(x)\) 表示 \(x\) 对情侣都错开的方案总数,那么答案可以写成如下形式: \[ {ans}_k= \binom{n}{k ...