数据挖掘算法简介 (6/10) - 朴素贝叶斯算法

6.   朴素贝叶斯算法(Microsoft Naive Bayes Algorithm

a.    目的

Microsoft Naive Bayes 算法是由 Microsoft SQL Server Analysis Services 提供的一种基于贝叶斯定理的分类算法,通过发现输入列与可预测列之间的关系来进行预测性建模。 Naïve Bayes 名称中的 Naïve 一词派生自这样一个事实:该算法使用贝叶斯技术,但不考虑可能存在的变量间的依赖关系。这里牵涉到2个概念:贝叶斯定理和不考虑依赖关系的Naïve或者朴素的含义和可能影响。

先看看什么是贝叶斯定理。简单地#35828;,贝叶斯定理是关于逆向概率的计算或预测。我们都了解正向概率的概念。例如假设袋子里面有N个白球,M个黑球,你伸手进去摸一把,摸出黑球的概率是多大,这就是正向概率的问题。而一个自然而然的问题是反过来:如果我们事先并不知道袋子里面黑白球的比例,而是闭着眼睛摸出一个(或好几个)球,观察这些取出来的球的颜色之后,那么我们可以就此对袋子里面的黑白球的比例作出什么样的推测。这个问题,就是所谓的逆概问题。其实这种性质的问题比正向概率的问题更普遍

通常,事件A在事件B(发生)的条件下的概率,与事件B在事件A的条件下的概率是不一样的;然而,这两者是有确定的关系,贝叶斯定理就是这种关系的陈述。贝叶斯公式的用途在于通过己知三个概率函数可以推出第四个。例如某公司对其全体雇员进行了一次吸毒检测。假定吸毒者被查出呈阳性(+)的概率为99%。而不吸毒者,检测呈阴性(-)的概率也为99%。并且进一步假设有0.5%的雇员吸毒。那每位医学检测呈阳性的雇员吸毒的概率有多高?

贝叶斯定理就可以回答这个问题。贝叶斯定理说B出现的前提下, A出现的概率等于A出现的前提下B出现的概率乘以A出现的概率再除以B出现的概率。用公式表达就是:

其中P(A|B)是已知B發生后A條件概率,也由于得自B的取值而被稱作A后驗概率P(A)A先驗概率或邊緣概率,之所以稱為"先驗"是因為它不考慮任何B方面的因素。同样的,P(B)B先驗概率或邊緣概率,也叫作標准化常量normalizing constant)。P(B|A)是已知A發生后B的條件概率,也由于得自A的取值而被稱作B后驗概率

按照這些術語,贝叶斯定理还可表述為:

后驗概率 = (相似度*先驗概率)/標准化常量

也就是說,后驗概率与先驗概率和相似度的乘積成正比。

另外,比例P(B|A)/P(B)也有時被稱作標准相似度(standardized likelihood),贝叶斯定理可表述為:

后驗概率 = 標准相似度*先驗概率

一言以蔽之,贝叶斯定理是关于随机事件AB条件概率(或边缘概率)的一則定理。它通过联系AB,计算从一个事件产生另一事件的概率, 即从结果上溯到原。

作为一个普遍的原理,贝叶斯定理对于所有概率的解释是有效的;然而,频率主义者贝叶斯主义者对于在应用中,某个随机事件的概率到底该如何被赋值,有着不同的看法:频率主义者根据随机事件发生的频率,或者总体样本裡面的发生的个数来赋值概率;而贝叶斯主义者则根据未知的命题来赋值概率。这样的理念导致贝叶斯主义者有更多的机会使用贝叶斯定理。

回到刚才的例子。令“D”为雇员吸毒事件,“N”为雇员不吸毒事件,“+”为检测呈阳性事件。可得

·        P(D)代表雇员吸毒的概率,不考虑其他情况,该值为0.005。因为公司的预先统计表明该公司的雇员中有0.5%的人吸食毒品,所以这个值就是D先验概率

·        P(N)代表雇员不吸毒的概率,显然,该值为0.995,也就是1-P(D)

·        P(+|D)代表吸毒者阳性检出率,这是一个条件概率,由于阳性检测准确性是99%,因此该值为0.99

·        P(+|N)代表不吸毒者阳性检出率,也就是出错检测的概率,该值为0.01,因为对于不吸毒者,其检测为阴性的概率为99%,因此,其被误检测成阳性的概率为1-99%

·        P(+)代表不考虑其他因素的影响的阳性检出率。我们可以通过全概率公式计算得到它:此概率 = 吸毒者阳性检出率(0.5% x 99% = 0.495%)+ 不吸毒者阳性检出率(99.5% x 1% = 0.995%)P(+=0.0149是检测呈阳性的先验概率。用数学公式描述为:

根据上述描述,我们可以计算某人检测呈阳性时确实吸毒的条件概率P(D|+)

尽管我们的检测结果可靠性很高,但是只能得出如下结论:如果某人检测呈阳性,那么此人是吸毒的概率只有大约33%,也就是说此人不吸毒的可能性比较大。我们测试的条件(本例中指D,雇员吸毒)越难发生,發生误判的可能性越大。

介绍完贝叶斯方法,我们来看看第二个概念,即朴素贝叶斯方法对条件独立的假设。先看一个例子。如果要你猜猜有一种水果:圆的、金黄色、重量有250克左右,它是什么?你很可能猜它是苹果或梨子。你可能没意识到,你在猜测时已经假定了形状、颜色、和重量这三个属性是彼此独立的。然而在现实生活中,真正彼此完全独立的条件却很少,那为什么基于这个独立假设的朴素贝叶斯方法却如此流行,而且结果却很好很强大、一点也不逊于较复杂的非朴素贝叶斯方法或者决策树法呢?有的学者对此提出了一个理论解释,并且建立了什么时候朴素贝叶斯的效果能够等价于非朴素贝叶斯的充要条件,这个解释的核心就是:不管属性间的相互依赖性有多强,只要这些依赖性在各个分类之间的分布都是均匀的, 或者依赖性之间相互抵消,朴素贝叶斯法依然是最恰当的 no matter how strong the dependences among attributes are, naive Bayes can still be optimal if the dependences distribute evenly in classes, or if the dependences cancel each other out)。

一言以蔽之,Microsoft Naive Bayes 算法是一种用于预测性建模的分类算法。 该算法计算输入列与可预测列之间的条件概率,并假定列相互独立。 和其他 Microsoft 算法相比,此算法所需运算量较少,因而有助于快速生成挖掘模型,从而发现输入列与可预测列之间的关系。 可以使用该算法进行初始数据探测,然后根据该算法的结果使用其他运算量较大、更加精确的算法创建其他挖掘模型。

b.   原理

对于可预测性变量的每个状态,朴素贝叶斯算法会计算出输入的每一个可能状态的概率。然后您可以利用这些概率对新的目标进行预测。由于该算法相当简单,所以它构建模型非常快。通常,人们是在预测任务的刚起步是,使用这个方法来建立起始点模式。朴素贝叶斯算法不支持连续属性。

此处,Microsoft Naive Bayes 查看器可列出数据集中的每个输入列。如果提供了可预测列的每种状态,它还会显示每一列中状态的分布情况。

您将利用该模型视图来确定对区分可预测列状态具有重要作用的输入列。

例如,从该处显示的 Commute Distance 行中,可以明显看到,输入值的分布对于购买者和 非购买者是不同的。 这表明,“Commute Distance = 0-1 miles”输入可能是一个预测因子。

该查看器还提供了分布的值,这样您便能看到,对于上下班路程为一至二英里的客户,其购买自行车的概率是 0.387,不购买自行车的概率是 0.287 在本示例中,该算法使用从诸如上下班路程之类的客户特征得出的数字信息来预测客户是否会购买自行车。

c.    方法

Microsoft Naive Bayes 的具体分析方法有三种:Shannon 平均信息量, Bayesian with K2 Prior Bayesian Dirichlet with uniform prior(默认)。该算法的设计目的是最小化处理时间,并高效地选择最为重要的属性;但您可以通过设置下面的参数来控制其所用的数据:

·        若要限制用作输入的值的数量,请降低 MAXIMUM_INPUT_ATTRIBUTES 的值。

·        若要限制模型要分析的属性的数量,请降低 MAXIMUM_OUTPUT_ATTRIBUTES 的值。

·        若要限制要为属性考虑的值的数量,请降低 MINIMUM_STATES 的值。

d.    数据要求

一个 Naive Bayes 树模型必须包含一个键列、至少一个可预测列和至少一个输入列。 所有属性均不能为连续属性;如果数据包含连续数值数据,则将会被忽略或离散化。

·       单键列 - 每个模型都必须包含一个用于唯一标识每条记录的数值列或文本列。 不允许复合键

·       输入列 - Naive Bayes 模型中,所有列都必须是离散列或经过离散化的列。对于 Naive Bayes 模型,确保输入属性相互独立也很重要。 这在使用该模型进行预测时尤为重要。原因在于,如果您使用已密切关联的两列数据,则会导致这些列的影响倍增,从而掩盖影响结果的其他因素。相反,在浏览模型或数据集时,该算法能够识别各个变量之间的相关性对于标识输入之间的关系会很有用。

·       至少有一个可预测列 - 可预测属性必须包含离散或离散化值。

可以将可预测列的值视为输入。 在浏览新数据集时,此操作对于查找列之间的关系会很有用。

e.    查看模型

您可以使用 Microsoft Naive Bayes 查看器浏览模型。 该查看器显示输入属性与可预测属性之间的关系。 该查看器还提供了每个分类的详细配置文件、将每个分类与其他分类区分开来的属性列表以及整个定型数据集的特征。 

f.     预测

为模型定型后,结果将存储为一组模式,您可以浏览该模型或利用它来作出预测。

您可以创建查询,以返回有关新数据与可预测属性之间的关系的预测,也可以检索统计信息,以说明该模型发现的相关性。

g.    自定义参数与性能优化

                                         i.     设置算法参数

1.    MAXIMUM_INPUT_ATTRIBUTES

指定算法在调用功能选择之前可以处理的最大输入属性数。 如果将此值设置为 0,则为输入属性禁用功能选择。默认值为 255

2.    MAXIMUM_OUTPUT_ATTRIBUTES

指定算法在调用功能选择之前可以处理的最大输出属性数。 如果将此值设置为 0,则为输出属性禁用功能选择。默认值为 255

3.    MINIMUM_DEPENDENCY_PROBABILITY

指定输入属性和输出属性之间的最小依赖关系概率。 该值用于限制算法生成的内容大小。 此属性可以设置为 0 1 之间的值。 较大的值减少模型内容中的特性数。默认值为 0.5

4.    MAXIMUM_STATES

指定算法支持的最大属性状态数。 如果属性的状态数大于最大状态数,则算法将使用属性的最常用状态,并视其余状态为缺失。默认值为 100

                                       ii.     建模标志

Microsoft 决策树算法支持下列建模标志。 创建挖掘结构或挖掘模型时,可定义建模标志以指定分析期间如何处理每列中的值。

1.    MODEL_EXISTENCE_ONLY

表示该列将被视为具有两个可能状态:Missing Existing Null 表示缺失值。适用于挖掘模型列

2.    NOT NULL

指示该列不能包含 Null 如果 Analysis Services 在模型定型过程中遇到 Null 值,则会导致错误。 适用于挖掘结构列

h.   应用

作为正在进行的促销策略,Adventure Works Cycle 公司的市场部已经决定通过发送宣传资料将目标定位为潜在的客户。 为了降低成本,他们只向有可能做出反应的客户发送宣传资料。 该公司将有关客户统计数据以及对上一邮件的反映的信息存储在数据库中。 他们希望利用这些数据将潜在客户和具备相同特征并曾经购买过公司产品的客户进行对比,以了解年龄和位置等统计数据如何帮助预测客户对促销的响应。 他们尤其希望找出购买自行车的客户与未购买自行车的客户之间的差别。

使用 Microsoft Naive Bayes 算法,市场部能够快速预测特定客户群的结果,进而确定最有可能对邮件做出响应的客户。 而使用 SQL Server Data Tools (SSDT) 中的 Microsoft Naive Bayes 查看器,他们还能够以直观的方式专门调查哪些输入列有助于对宣传资料做出积极响应。