朴素贝叶斯原理及实现
一、理论基础
(一) 朴素贝叶斯定理
具体来说, 某一个样本属于某一个类别的概率等于该类别发生的概率与在该类别发生的情况下各个属性发生的概率依次相乘的结果.
根据贝叶斯定理,事件X发生时,类别Ci发生的后验概率为:
而P(X)对于每一个CI而言都是相等的,并且基于X各属性间的相互独立性(朴素假设)成立,则可得以下结论。
对于满足X特征变量的类别Ci而言,其后验概率可通过上述公式进行计算得出.随后通过比较各Ci的具体数值大小,确定其中数值最大的类 别,则该类即为最可能发生的类 别.
(二)示例 1、训练数据
2、需要预测的数据为
X={age=youth,income=medium,student=yes,credit_rating}
计算此用户购买computer的可能性。
3、计算为YES的概念
(1)购买用户的总概率。从表中可见14人中有9个购买了电脑,因此概率为:
(2)在购买用户的9人中符合X特征中的age=youth的有2人,比例为:
(3)在购买用户的9人中符合X特征中的income=medium的有4人,比例为:
(4)在购买用户的9人中符合X特征中的student=yes的有6人,比例为
(5)在购买用户的9人中符合X特征中的credit_rating的有6人,比例为
根据朴素贝叶斯定理,
其中:
P(X)对所有分类都相等
在满足X={age=youth,income=medium,student=yes,credit_rating}的情况下,Ci={buys_computer=yes}的后验概率等于:
注
总结:根据上述计算得出结论:基于朴素贝叶斯分类方法将元组X归类为购买计算机=Yes的结果。
(三)三种常见的模型
1、伯努利模型
类似于多项式模型,在处理离散型数据时(即基于单个词的存在与否),伯努利模型也被广泛应用。然而其主要区别在于,在伯努利模型中每个变量只能取值于1或0(例如,在文本分类任务中,默认情况下如果某个单词出现在文档中,则该单词对应的变量设为1;反之,则设为0)。
伯努利模型中,条件概率 P ( x i | y k ) 的计算方式是:
当特征值 x i 为1时, P ( x i | y k ) = P ( x i = 1 | y k ) ;
当特征值 x i 为0时, P ( x i | y k ) = 1 − P ( x i = 1 | y k ) ;
2、多项式模型
当特征属于离散型时,在这种情况下采用多项式模型。
多项式模型在估计先验概率P(y_k)以及条件概率P(x_i|y_k)时会对这些概率进行一定的 平滑处理 ,具体公式如下:
P ( y k ) = N y k + α N + k α
N代表总样本的数量,
k代表总类别的数量,
其中N(y_k)表示类别为y_k的样本数量,
α被定义为平滑参数。
P ( x i | y k ) = N y k , x i + α N y k + n α
N_{y_k} 表示类别为 y_k 的样本数量;n 代表特征空间中的维度数目;N_{y_k,x_i} 则指在类别 y_k 中第 i 维特征取值为 x_i 的样本数量;α 作为平滑参数用于防止数值溢出。
当 α = 1 时,称作Laplace平滑,当 0 < α < 1 时,称作Lidstone平滑, α = 0 时不做平滑。
如果不采用平滑方法,则会出现以下情况:当某一个体特征取值x_i从未出现在训练样本中时,则会使得条件概率P(x_i|y_k)估计为零。这种情况下将会导致后验概率估计值归零。通过引入平滑处理则能够有效规避这一问题。
3、高斯模型
当我们面对连续型特征时,在不实施任何光滑处理的情况下进行多项式回归分析会导致出现过多的概率估计结果为零的情况(即P(x_i|y_k)=0)。即便如此实施了光滑处理所得到的结果仍然无法准确刻画真实情况因此为连续型特征设计专门的概率模型——高斯模型——更为适宜
下面是一组人类身体特征的统计资料。
性别
身高(英尺)
体重(磅)
脚掌(英寸)
男
6
180
12
男
5.92
190
11
男
5.58
170
12
男
5.92
165
10
女
5
100
6
女
5.5
150
8
女
5.42
130
7
女
5.75
150
9
已知某人身高6英尺、体重130磅,脚掌8英寸,请问该人是男是女?
根据朴素贝叶斯分类器,计算下面这个式子的值。
P(身高|性别) x P(体重|性别) x P(脚掌|性别) x P(性别)
主要问题在于身高、体重和脚掌均为连续性数据,并且难以直接应用离散变量的概率计算方法。在样本数量有限的情况下也无法将这些连续性数据分区间进行分析以获得准确的概率值。那么采取什么措施才能有效应对这一挑战呢?
这时,在假设男性和女性的身高、体重以及脚掌这三个指标都可以被视为服从正态分布的基础上(或:基于男性和女性的身高、体重、脚掌这三个指标都可以被视为服从正态分布),通过对样本数据进行分析计算得到均值和方差(或:通过对样本数据进行分析计算得到了均值以及方差),从而可以推导出该正态分布的概率密度函数(或:从而可以得到该正态分布的概率密度函数)。利用概率密度函数就可以将特定数值代入概率密度函数中进行评估(或:就可以将特定数值代入到概率密度函数中去进行评估)。
例如,在统计学中,男性的身高数据服从均值为5.855、方差为0.035的正态分布。因此,在这种情况下,某人身高达到6英尺的概率密度值为1.5789(需要注意的是,此处的概率密度值并不直接表示概率大小)
不仅能够计算脚掌和体重的均值与方差... 而且能够用于性别分类的分析。
P(身高=6|男) x P(体重=130|男) x P(脚掌=8|男) x P(男)
= 6.1984 x e- 9 P(身高=6|女) x P(体重=130|女) x P(脚掌=8|女) x P(女)
= 5.3778 x e- 4
1
2
3
4
1
2
3
4
可以看到,女性的概率比男性要高出将近10000倍,所以判断该人为女性。
- 总结
高斯模型假设每一维特征都服从高斯分布(正态分布):
P ( x i | y k ) = 1 2 π σ 2 y k , i √ e − ( x i − μ y k , i ) 2 2 σ 2 y k , i
μ y k , i 表示类别为 y k 的样本中,第i维特征的均值。
σ 2 y k , i 表示类别为 y k 的样本中,第i维特征的方差。
4、简单总结
多项式模型:能处理属性值属于有限集合的各种情况;例如将收入划分为高中低三级。
(2)高斯模型:适合于属性值呈现连续性特征的情况,在具体实施时可选取如具体的收入数据点、某部电视剧的收视率等作为分析对象。当然还可以将这些数值划分为特定区间进行处理,并运用多项式模型加以拟合;但这样操作所带来的精度提升却有限度。
(3)伯努利分布:适用于仅限于属性取值为两种情况的情形。例如,在标签设置中使用性别时其取值仅为男性与女性。实际上这属于一种特殊的二项式形式
(4)假设训练集的数据量充足且服从高斯分布;当采用多项式分布进行建模时,在这种情况下生成的模型会趋近于高斯分布特性。换言之,在数据维度远小于样本数量的情况下,默认就可以使用多项式模型取代传统的高斯模型以达到类似的建模效果。这表明 spark mllib尚未支持直接使用高斯分布在建模中。另一方面的原因在于由于数据分散在不同节点上而难以计算方差这一关键统计量,在这种情况下最终运算结果仍需集中在一个节点完成计算
二、spark实现
(一)二项式及多项式模型 1、训练数据
说明:
(1)朴素贝叶斯方法基于各属性间的相互独立性这一假设展开工作;然而,在实际应用中这些数据集中的各属性往往不具备相互独立性;例如年龄特征与学生标记之间即存在显著的相关性关系;仅作为举例说明
(2)上述属性中,是否学生符合伯努利模型,其余3个属性均符合二项式模型。
三、spark mllib API使用
