Ourren

关注技术,记录生活.

数据挖掘之朴素贝叶斯算法

| 留言

Author:youstar

Blog:http://blog.ourren.com

最近由于需求翻阅了一些数据挖掘相关资料,对数据挖掘过程中的分类技术进行了理解和研究,遂记录如下。

1、数据挖掘概述

数据挖掘,就是提取或者挖掘数据,主要通过对已获得的大量数据进行深度整理和分析,其分析结果可以反映过去结果和预测未来趋势。目前几种典型的数据挖掘研究有:关联规则、分类、聚类、预测、web挖掘等。分类挖掘可以从数据中提取相关特征,然后建立相应模型或者函数,并把数据中的每个对象归类到特定分类。例如: 可以检测邮件是否为垃圾邮件,检测数据是否为攻击数据,样本是否为恶意程序等等这些都可以通过分类挖掘实现,而分类挖掘中又分为决策树方法、统计学方法、贝叶斯网络、神经网络等其他分类技术。

2、朴素贝叶斯算法

贝叶斯分类是一种基于统计学的分类方法,就是大学学的概率统计神马的。朴素贝叶斯算法是在贝叶斯算法上基于独立假设的贝叶斯定理的简单概率分类器,因此这里谈到技术的就是数据挖掘中很小的一部分了。其主要基本思路如下:

需求分析——>提取特征——->训练样本——–>检测特征——->计算后验概率——>判定

首先是需求分析,我们需要清楚自己的目的:即对这些数据分析能够得出什么结果?我们需要什么结果?一个分类模型;还是其他。例如:我们需要对大量的邮件进行分析处理,最终需要建立一个模型能够自动判定一封邮件是够为垃圾邮件或者正常邮件,因此,最终我们只有两个类别,即垃圾邮件、正常邮件。这就是我们的需要。

其次是提取特征,需要对待分析的数据进行详细分析,提取不同点。例如,我们需要研究正常邮件与垃圾邮件有哪些方面的不同,垃圾邮件具有哪些特性,而正常邮件具有额外的哪些特性。一般来讲,垃圾邮件内容中往往含有图片、链接、邮件头、多个收件人、HTML标签问题等比较特殊的特征,而正常邮件一般没有这些特征。

再次是训练样本,这个步骤一般是提取大量样本按照其上一步提取的特征值进行分析并统计,得到一个比较详细的特征统计表。例如:随机从邮件服务器中提取1000封邮件,然后对每封邮件内容按照前面提到的特征进行统计分析。

再次是检测特征,通过前面的过程我们已经建立了一个朴素贝叶斯模型,我们可以通过编写代码实现自动检测特征。例如,可以通过python或者c++实现文本的特征匹配,这里可以采用其他文本匹配算法。

再次是计算后验概率,根据朴素贝叶斯算法,可以计算在已知分类情况下的特征概率,即先验概率。例如,我们可以计算在假定为正常邮件情况下,文本特征有:图片、链接、多个收件人的情况下概率P(图片|垃圾邮件)、P(链接|垃圾邮件)等,然后我们在计算假定为垃圾邮件情况下,文本特征有图片、链接、多个收件人的情况下概率P(图片|正常邮件)、P(链接|正常邮件)等.

最后,我们可以通过比较先验概率的值和概率来判定该样本属于哪种类型。例如:分别计算P(垃圾邮件)P(图片|垃圾邮件)P(链接|垃圾邮件)….与P(正常邮件)P(图片|正常邮件)P(链接|正常邮件)….,然后看那个值比较大,从而判定属于这个类别。

系统性能指标一般会通过正确率、准确率、召回率这三个指标进行评定。

3、总结

整体来说,整个过程还是比较复杂,特别是样本特征方面,需要考虑比较周全然后其效果才会更加明显,而训练样本的值也会影响最终结果。网上也有一个比较简单的实例,python实现的Naive Bayes[文献3],大伙可以参考。附带几篇比较好的文章。

4、参考资料

(1)范明.范宏建《数据挖掘导论》

(2)焦李成.《智能数据挖掘与知识发现》

(3)Naive Bayes的Python实现

(4)基于朴素贝叶斯分类器的文本分类算法(上)

(5)贝叶斯推断及其互联网应用(一):定理简介

(6)贝叶斯推断及其互联网应用(二):过滤垃圾邮件