机器学习实战读书笔记系列4——朴素贝叶斯

1.回顾

  1. 贝叶斯决策理论的核心:选择具有最高概率的决策
    利用已知值来估计未知概率
  2. 计算条件概率——贝叶斯准则
    在这里插入图片描述
  3. 使用条件概率进行分类,概率大,就分到该类(对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别)

2.使用朴素贝叶斯进行文档分类

朴素贝叶斯分类器假设:

  1. ‘朴素’——特征之间相互独立(特征属性是条件独立的)(对于文本来说,一个单词的出现与其他单词无关),降低对数据量的要求则样本数为N*x
  2. 每个特征同等重要
    注:样本数随特征数目增大而增大(指数级)若每个特征需要N个样本,共x个特征,则样本数为 N x N^{x} Nx

朴素贝叶斯分类定义:

1.待分类项 w=(w1,w2,w3…wn)
2.类别C
3.计算条件概率 p(c|w)
给定训练样本集(已知分类的待分类项集合)
统计各类别下各个特征属性的条件概率估计
根据各特征属性条件独立假设,根据贝叶斯定理推导p(c|w)
4.选择概率最大的类别

朴素贝叶斯分类流程:

准备工作阶段分类器训练阶段应用阶段
输入所有待分类数据特征属性和训练样本分类器和待分类项
输出特征属性和训练样本分类器待分类项与类别的映射关系
主要工作

1.准备工作阶段(人工完成)
主要工作是根据具体情况确定特征属性,并对每个特征属性进行适当划分,然后由人工对一部分待分类项进行分类,形成训练样本集合。这一阶段的输入是所有待分类数据,输出是特征属性和训练样本。分类器的质量很大程度上由特征属性、特征属性划分及训练样本质量决定。

2.分类器训练阶段
主要工作是计算每个类别在训练样本中的出现频率及每个特征属性划分对每个类别的条件概率估计,并将结果记录。其输入是特征属性和训练样本,输出是分类器。

3.应用阶段
使用分类器对待分类项进行分类,其输入是分类器和待分类项,输出是待分类项与类别的映射关系。
在这里插入图片描述

估计类别下特征属性划分的条件概率及Laplace校准:
1.朴素贝叶斯分类的关键性步骤是计算各个特征属性划分的条件概率 p ( w i ∣ c ) p(w_i|c) p(wic)
1)当特征属性为离散值时,统计训练样本中各个划分在每个类别中出现的频率即可用来估计P(w|c)
2)当特征属性为连续值时,假定其值服从高斯分布(也称正态分布),即
g ( x , u , σ ) = 1 2 π σ e − ( x − n ) 2 2 σ 2 g(x,u,\sigma )=\frac{1}{\sqrt{2\pi }\sigma }e^{^{\frac{-(x-n)^{2}}{2\sigma^{2} }}} g(x,u,σ)=2π σ1e2σ2(xn)2
p ( w i ∣ c i ) = g ( w i , u c i , σ c i ) p(w_i|c_i)=g(w_i,u_ci,\sigma_ci ) p(wici)=g(wi,uci,σci)
只要计算出训练样本中各个类别中此特征项划分的各均值和标准差,代入上述公式即可得到需要的估计值。
2. 当P(w|c)=0,即某个类别下某个特征项划分没有出现时,就产生这种现象。引入Laplace校准,它的思想非常简单,就是对每类别下所有划分的计数加1,这样如果训练样本集数量充分大时,并不会对结果产生影响,并且解决了上述频率为0的尴尬局面
3. 遇到特征之间不独立问题
参考改进的贝叶斯网络,使用DAG来进行概率图的描述

优点、缺点:
优点:对小规模的数据表现良好,适合多分类任务,适合增量式训练
缺点:对输入数据的表达形式很敏感(离散、连续、值极大极小)

3.使用python进行文本分类

特征:文本中的词条,可以使任意字符组合,如:单词,URL ,IP地址
过程:
1.从文本中构建词向量:根据单词是否在文中出现0-1向量
2.基于向量计算条件概率。给定一个文本,判断它属于哪一个类别。先计算每个类别的概率,再统计当前每个类别下出现的词的频率,除以当前类别包含的总词数,就是该类别下出现某个词的条件概率。通过概率的比较,可以找到表征该类别的单词
3.注意:分母对于所有类别都为常数,所以只要将分子最大化即可
在这里插入图片描述

根据词向量计算概率伪代码:

计算每个类别的文档数目
对每篇训练文档:
    对每个类别:
        如果词条出现在文档中,增加该词条的计数值
        增加所有词条的计数值
    对每个类别:
        对每个词条:
            将该词条数目除以总词条数目得到条件概率
    返回每个类别的条件概率

缺陷:
1.多个概率的乘积,如果一个概率值为0,则最后的乘积也为0.解决,所有词出现次数初始化为1,总次数初始化为2
2.太多很小的数相乘,造成下溢出问题或者得不到正确的答案(浮点数舍入,四舍五入会得到0)。解决,对乘积取对数ln(a*b)=ln(a)+ln(b)

每个词的出现与否作为一个特征
词集模型:每个单词只能出现一次
词袋模型 :每个单词可以出现多次

4.示例

过滤网站恶意留言

电子邮件垃圾过滤

1.文本解析(切分文本)
将每个文本切分成一个个单词,去除其他符号(正则表达式实现)包括空字符串、标点符号、大小写、过滤掉长度小于3的字符
涉及到url喝html文本解析等
2.测试算法时:随机选择数据的一部分作为训练集,而剩余部分作为测试集的过程称为留存交叉验证(hold-out cross validation)
可以通过多次迭代求出平均错误率并且输出错分文档的列表,发现错误
将垃圾邮件误判为正常邮件要比把正常邮件误判为垃圾邮件要好(可以修正分类器,在第七小节讨论)

使用朴素贝叶斯分类器从个人广告中获取区域倾向

如何解释朴素贝叶斯分类器训练得到的知识?
广告商往往想知道关于一个人的一些特定人口统计信息,以便能够更好的定向推销广告。
Universal Feed Parser是python中最常用的RSS程序库。
收集数据是导入RSS源
RSS源会随时间而改变,要在函数外导入
未完待续。。。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值