朴素贝叶斯算法

来源:互联网 发布:weex playground 源码 编辑:程序博客网 时间:2024/06/07 02:15

 

 

 

 

 

 

 

 

 

 

目录

1  朴素贝叶斯算法的概念... 2

2  贝叶斯定理... 2

3画图案例说明...2

3.1 确定特征属性及划分... 2

3.2  获取训练样本... 3

3.3  计算训练样本中每个类别的频率... 3

3.4  计算每个类别条件下各个特征属性划分的频率... 3

3.5  使用分类器进行鉴别... 3

3.6  案例图解... 3

4  朴素贝叶斯算法小结... 3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1 朴素贝叶斯算法的概念

贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。

本章讨论贝叶斯分类中最简单的一种:朴素贝叶斯分类。

朴素贝叶斯算法之所以加上朴素二字,是因为前提是假设了所有的分类特征(即下文中案例中的a1,a2,a3等),假设为他们同等重要(可以理解为互不影响的关系,即相互独立的)。

 

2 贝叶斯定理

对于分类问题,其实谁都不会陌生,说我们每个人每天都在执行分类操作一点都不夸张,只是我们没有意识到罢了。例如,当你看到一个陌生人,你的脑子下意识判断TA是男是女;你可能经常会走在路上对身旁的朋友说“这个人一看就很有钱、那边有个非主流”之类的话,其实这就是一种分类操作。

 

3画图案例说明

下面讨论一个使用朴素贝叶斯分类解决实际问题的例子,为了简单起见,对例子中的数据做了适当的简化。

 

这个问题是这样的,对于SNS社区来说,不真实账号(使用虚假身份或用户的小号)是一个普遍存在的问题,作为SNS社区的运营商,希望可以检测出这些不真实账号,从而在一些运营分析报告中避免这些账号的干扰,亦可以加强对SNS社区的了解与监管。

 

如果通过纯人工检测,需要耗费大量的人力,效率也十分低下,如能引入自动检测机制,必将大大提升工作效率。这个问题说白了,就是要将社区中所有账号在真实账号和不真实账号两个类别上进行分类,下面我们一步一步实现这个过程。

首先设C=0表示真实账号,C=1表示不真实账号。

 

3.1 确定特征属性及划分

 

这一步要找出可以帮助我们区分真实账号与不真实账号的特征属性,在实际应用中,特征属性的数量是很多的,划分也会比较细致,但这里为了简单起见,我们用少量的特征属性以及较粗的划分,并对数据做了修改。

 

我们选择三个特征属性:a1:日志数量/注册天数,a2:好友数量/注册天数,a3:是否使用真实头像。在SNS社区中这三项都是可以直接从数据库里得到或计算出来的。

 

下面给出划分:a1:{a<=0.05, 0.05<a<0.2, a>=0.2},a1:{a<=0.1,0.1<a<0.8, a>=0.8},a3:{a=0(不是),a=1(是)}(上述结果通过概率得出)

3.2  获取训练样本

 

这里使用运维人员曾经人工检测过的1万个账号作为训练样本。



3.3  计算训练样本中每个类别的频率

 

用训练样本中真实账号和不真实账号数量分别除以一万,得到:


3.4  计算每个类别条件下各个特征属性划分的频率

 

3.5  使用分类器进行鉴别

 

下面我们使用上面训练得到的分类器鉴别一个账号,这个账号使用非真实头像,日志数量与注册天数的比率为0.1,好友数与注册天数的比率为0.2。

 

3.6  案例图解

 

 

4 朴素贝叶斯算法小结

 

 

    朴素贝叶斯的主要优点有:

 

    1)朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。

 

    2)对小规模的数据表现很好,能个处理多分类任务,适合增量式训练,尤其是数据量超出内存时,我们可以一批批的去增量训练。

 

    3)对缺失数据不太敏感,算法也比较简单,常用于文本分类。

 

    朴素贝叶斯的主要缺点有:   

 

    1)理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为朴素贝叶斯模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好。而在属性相关性较小时,朴素贝叶斯性能最为良好。对于这一点,有半朴素贝叶斯之类的算法通过考虑部分关联性适度改进。

 

    2)需要知道先验概率,且先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。

 

    3)由于我们是通过先验和数据来决定后验的概率从而决定分类,所以分类决策存在一定的错误率。

 

    4)对输入数据的表达形式很敏感。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1  朴素贝叶斯算法的概念

贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。

本章讨论贝叶斯分类中最简单的一种:朴素贝叶斯分类。

朴素贝叶斯算法之所以加上朴素二字,是因为前提是假设了所有的分类特征(即下文中案例中的a1,a2,a3等),假设为他们同等重要(可以理解为互不影响的关系,即相互独立的)。

 

2  贝叶斯定理

对于分类问题,其实谁都不会陌生,说我们每个人每天都在执行分类操作一点都不夸张,只是我们没有意识到罢了。例如,当你看到一个陌生人,你的脑子下意识判断TA是男是女;你可能经常会走在路上对身旁的朋友说“这个人一看就很有钱、那边有个非主流”之类的话,其实这就是一种分类操作。

 

3画图案例说明

下面讨论一个使用朴素贝叶斯分类解决实际问题的例子,为了简单起见,对例子中的数据做了适当的简化。

 

这个问题是这样的,对于SNS社区来说,不真实账号(使用虚假身份或用户的小号)是一个普遍存在的问题,作为SNS社区的运营商,希望可以检测出这些不真实账号,从而在一些运营分析报告中避免这些账号的干扰,亦可以加强对SNS社区的了解与监管。

 

如果通过纯人工检测,需要耗费大量的人力,效率也十分低下,如能引入自动检测机制,必将大大提升工作效率。这个问题说白了,就是要将社区中所有账号在真实账号和不真实账号两个类别上进行分类,下面我们一步一步实现这个过程。

首先设C=0表示真实账号,C=1表示不真实账号。

 

3.1 确定特征属性及划分

 

这一步要找出可以帮助我们区分真实账号与不真实账号的特征属性,在实际应用中,特征属性的数量是很多的,划分也会比较细致,但这里为了简单起见,我们用少量的特征属性以及较粗的划分,并对数据做了修改。

 

我们选择三个特征属性:a1:日志数量/注册天数,a2:好友数量/注册天数,a3:是否使用真实头像。在SNS社区中这三项都是可以直接从数据库里得到或计算出来的。

 

下面给出划分:a1:{a<=0.05, 0.05<a<0.2, a>=0.2},a1:{a<=0.1,0.1<a<0.8, a>=0.8},a3:{a=0(不是),a=1(是)}(上述结果通过概率得出)

3.2  获取训练样本

 

这里使用运维人员曾经人工检测过的1万个账号作为训练样本。

3.3  计算训练样本中每个类别的频率

 

用训练样本中真实账号和不真实账号数量分别除以一万,得到:

 

3.4  计算每个类别条件下各个特征属性划分的频率

 

3.5  使用分类器进行鉴别

 

下面我们使用上面训练得到的分类器鉴别一个账号,这个账号使用非真实头像,日志数量与注册天数的比率为0.1,好友数与注册天数的比率为0.2。

 

3.6  案例图解

 

 

4  朴素贝叶斯算法小结

 

 

    朴素贝叶斯的主要优点有:

 

    1)朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。

 

    2)对小规模的数据表现很好,能个处理多分类任务,适合增量式训练,尤其是数据量超出内存时,我们可以一批批的去增量训练。

 

    3)对缺失数据不太敏感,算法也比较简单,常用于文本分类。

 

    朴素贝叶斯的主要缺点有:   

 

    1)理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为朴素贝叶斯模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好。而在属性相关性较小时,朴素贝叶斯性能最为良好。对于这一点,有半朴素贝叶斯之类的算法通过考虑部分关联性适度改进。

 

    2)需要知道先验概率,且先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。

 

    3)由于我们是通过先验和数据来决定后验的概率从而决定分类,所以分类决策存在一定的错误率。

 

    4)对输入数据的表达形式很敏感。

原创粉丝点击