当前课程知识点:R语言数据分析 > 下部:博术 > 第12章 既是世间法、自当有分别 > 12.7 朴素贝叶斯
大家好
欢迎来到《R语言数据分析》课程
今天和大家交流一下
朴素贝叶斯的相关内容
在我们前面的课程里面
简单的讲解了一下这个树模型
对于树模型而言
它其实就是什么
将这个数据空间划分成更小的区域
然后从而保证我们这个
相应的类别标签的一个纯度
对吧
最终实现我们在划分之后
进行分类
这是树模型
其实可以从这个不纯度或者不确定性的减少
这个角度来看
来看待它是如何分类的
也就是经过这个子空间的划分
来减少这个不确定性
当然说到这个不确定性的减少
其实还有另外一种方法是什么
比如说我们现在文科和理科
那这个取值它有一个不确定性
但是当我有了更多的证据之后
我可以减少这个不确定性
就是说在特征取某些值的时候
那我相应的
Y取文科
Y取理科
它这个不确定性是可以减少的
也就是说我们可以通过这么一个
条件概率来进行分类
这也就回到我们今天的主题
另外一种不确定性的减少的办法
就是朴素贝叶斯
说到这个朴素贝叶斯的话
我们先得看一看这个贝叶斯公式
贝叶斯公式其实大家都比较了解
就是这一个公式
在B发生的情况之下
A发生的概率等于多少
等于A发生的情况之下
B发生的概率乘以
A发生的概率再除以B发生的概率
当然这个公式我们记的话
其实是有一定的记忆的负担的
我们可以这样理解它
其实是什么
就是B发生的话相当于一个新的证据
一个新的证据
我先看看A本身发生概率有多大
A本身发生的概率多大
就是先验概率有多大
然后再看什么
再看这一部分
这一部分是什么
这部分就是说
B发生的时候如何提升A发生的概率
一个提升的程度
大家是还记得我们的
关联规则相应的算法的话
里面的提升度怎么定义
其实就是什么
A发生情况之下B发生概率除以
B发生的概率
就A和B这两个事件相互之间的提升的程度
A发生的情况之下
B发生的概率除以B发生的概率
毫无疑问是A提升B的程度
但同时我们也知道这个提升度是相互的
也相当于是
B发生的情况之下
A发生的概率再除以A的概率
所以我们可以看所谓的贝叶斯公式
其实就是什么
就是A发生概率本身是多少
然后再看看B出现的情况之下
对A提升的提升度有多大
我们这样来理解这个贝叶斯公式
那这个贝叶斯公式为什么来用来做分类呢
我们可以换一个形式
比如说我们现在把这个A换成了特征的组合
B换成了类别
具体到我们这个问题情境里面来
就是我的性别为男还是为女
我的语文成绩怎样
数学成绩怎样
外语成绩怎样等等
这九科成绩
都是一个特征的组合
在特征取不同的值的情况之下
我这个文理分科为文科
还是我这文理分科为理科
相应的什么
我相应的概率我都可以求出来
这个条件概率求出来
一旦我这个类别为1的条件概率求出来了(类别1=理科)
类别为2的条件概率求出来了(类别2=文科)
比如说为文科的概率是多少
是0.3
为理科的话是0.7
那好
那就证明在当前这个特征组合之下
我这应该
文理科应该选理科
就是选这个概率大的一个
当然这个公式我们可以
套用上面这个贝叶斯公式
我们可以将它进一步变成右边这个形式
也说类别一本身出现的概率再乘以什么
乘以它的这个特征组合之下
对于类别1出现概率的一个
提升的程度
当然我们最终都是为了
比较这两个概率的大小
取更大的那个而已
所以它分母相同的情况之下
我就不需要计算了
我只要知道类别1、类别2分别的概率
以及什么类别1出现的情况之下
这个特征组合出现的概率多大
类别2出现的情况之下
相应的特征组合出现概率有多大
在算完之后
其实我就可以得到
我们左侧这相应的两个概率(相对大小)
进而进行类别的划分
这也是如何将贝叶斯公式应用于分类
这是一个基本的原理
咱们看一下具体的过程
这时候我们将它换一个形式
这个时候条件就是什么
条件就是F1 F2到Fn
也就是相应的特征
然后我这个事件
就是这个类究竟是取文科还是理科
我们按照这个贝叶斯公式也可以这样写
写成这种形式
当然我们这个分母刚才说了不发挥作用的话
我只要计算上面这个分子的部分就可以
分子的部分的话
前面叫做P(C)这一块很容易计算
我只要对历史上出现文科和出现理科的次数
进行一个统计
再进行比例的换算
就得到这个概率了
比较关键的
是后面这一部分
也就这一部分所对应的
变成这个我们可以展开一下
就是
F1|C
F2|C,F1
一直往这样一直往下
我们把它展开来
变成这一个形式
当然这一个展开的形式的话
其实是很难求的
所以我们才说
这是不仅仅是利用贝叶斯公式来进行分类
而是用什么
而是用朴素贝叶斯
我们要朴素一点
什么意思
我们要假定这个特征之间相互独立
为了方便计算后面这个展开式
我们就做这么一个假设
这也是所谓的称之为朴素贝叶斯
这个朴素的来历
假如有这么一个假设的话
那怎样
那我这个公式就好计算
后面所有的部分都变成
F1|C F2|C Fi|C
相应的这一部分变成什么了呢
我们看一下
就变成了一个连乘的方式了
变成一个连乘的方式
然后这个公式相对来讲就比较容易记
我对历史上的我的训练集已经拿到了数据
我来做什么
也是做一个相应的
条件概率计算
其实也是在求比例
就C类别为文科的时候
我看这个性别为男
它的比例多少这个求出
F1|C了对吧
同样也可以求相应的其他一些值
求完之后怎办
我用那个表决函数
argmax
表决的是谁看后面这个结果
就是c不一样的时候
对我们这个问题情境来讲
就是c等于文科和c等于理科
等于文科的时候
我先求出p(c) p(c=文科)的值
然后再求
文科的时候性别为男
文科的时候性别为女等等
把这个求出来
求完之后将这个连乘
最后得到这一个
得到这一个连乘的结果
我看看
这个c是等于文科的时候
后面这个结果大一点
还是c等于理科的时候
这个结果大一点
假如文科大的话
那好
我最后返回的结果是什么
就是文科
假如理科大的话
c等于理科的时候
后面这个公式它的结果大的话
毫无疑问我最后表决结果
就是理科了
这是我们朴素贝叶斯它的一个最基本的假设
以及它的用于分类的一个最基本的逻辑
当然这个过程本身相对比较简单
它其实就在做计数 在求比例
但是其实这个算法用得好的话
它其实效果也非常好
我们不能说这个算法原理简单
就是说它太low了
比如说我们看这个nature
他一个子刊
其实在17年的时候
还有人用
相应的贝叶斯的相应的算法
做相应的研究
好咱们看一看
看一看我们这个在R里面如何具体实现
这个时候我们要调用这个
加载这个e1071这个包
这个包里面专门有个
naiveBayes()
朴素贝叶斯
跟我们大部分的那个算法建模
它的参数设置是一样的
首先是
首先确定自变量和因变量这么一个公式
然后要基于哪一份数据进行训练
训练出来模型
同样我们交给这个imodel
统一我们命名了一下叫imodel
假如我要看这个模型在这个训练集上
它的拟合效果的话
它的拟合效果我们是用这个predict()这个函数
这个newdata和我们前面训练集设置一样
type等于class
我们通过具体的这个Metrics里面ce这个函数
来评价它的性能指标
也就是看看它的分类错误率
这个时候是多少
0.29
就是十个里面可能要错三个左右了
十个里面错三个左右
那咱们看看这个在测试集上它的性能表现
同样是调这个函数
无非是什么newdata变成什么
变成测试集了
这个时候它结果是多少? 0.27
它比我们在那个训练集上效果稍微好了一点点
当然一般来讲我们在训练集上拟合效果
可能会绝大部分情况之下
都会优于这个测试集的效果
但也没有绝对的理由证明就是说
测试效果不会比这个训练集好
只是这种情况相对比较少一点而已
这是我们R里面一个实现的过程
就是调这个naiveBayes
调用了相应的predict这个泛型函数进行预测
咱们同样可以通过这个
K折交叉检验
来看一看
整个这个朴素贝叶斯这个算法
在我们这份数据集上
它最终在性能指标来稳定在哪个水平之上
前面的所有的框架都是完全一样的
这个时候无非是什么
无非是我们这个训练函数稍微有点不一样
其他的都是沿用我们前面的决策树
随机森林等等
同样的一个K折交叉检验的一个框架
我们也可以将这个什么预测结果和实际结果
交给这个imetrics
从而记录下我们朴素贝叶斯这个算法
对当前这一折它在训练集测试集上
它一个性能表现
为下一步我们做不同的模型比较
奠定一个基础
当然我们可以看一看
当前这个global_performence里面naiveBayes
它相应的一些指标
在训练集上的话
基本上都是稳定在28~29%
当然也就稍微好一点的26% 30%左右
在测试集上基本上和这个训练集
它性能指标差不多的
这是我们朴素贝叶斯的一个最基本的原理
以及在R里面的一个实现的过程
那我们再重新温习一下
究竟我们所谓的朴素贝叶斯
它的本质是什么
我们都说所谓机器学习也好
数据挖掘也好
都是发现数据背后的规律
而规律是什么
规律都是某种关系结构
那我这个朴素贝叶斯它究竟发现了什么关系
找到了什么规律
或者说这个规律的表现形式是什么
咱们考虑一下
其实通过我们前面这个
朴素贝叶斯的原理可以发现
我们所学到这个模型是什么
就是很多很多的先验概率以及
条件概率是不是
我们在做分类的时候也就是
先验概率和条件概率的乘积
所以我们真正学到的规律是什么
就是这些先验概率和条件概率
这是我们朴素贝叶斯的原理实现
以及它的一个作为规律来讲
它的一个表现形式
本次课到此结束
谢谢大家
-第1章 气象万千、数以等观
--第1章 作业
-第2章 所谓学习、归类而已
--第2章 作业
-第3章 格言联璧话学习
--第3章 作业
-第4章 源于数学、归于工程
--第4章 作业
-讨论题
-第5章 工欲善其事、必先利其器
--第5章 作业
-第6章 基础编程——用别人的包和函数讲述自己的故事
--6.1 编程环境
--6.4 控制流
--第6章 作业
-第7章 数据对象——面向数据对象学习R语言
--第7章 作业
-第8章 人人都爱tidyverse
--第8章 作业
-第9章 最美不过数据框
--第9章 作业
-第10章 观数以形
--第10章 作业
-第11章 相随相伴、谓之关联
--11.1 导引
--第11章 作业
-第12章 既是世间法、自当有分别
--12.1 导引
--第12章 作业
-第13章 方以类聚、物以群分
--13.1 导引
--第13章 作业
-第14章 庐山烟雨浙江潮
--第14章 作业