摘要:旁听了清华大学王建勇老师的 数据挖掘:理论与算法 的课,讲的仍是挺细的,好记性不如烂笔头,在此记录本身的学习内容,方便之后复习。html
1)贝叶斯分类器是一种基于统计的分类器,它根据给定样本属于某一个具体类的几率来对其进行分类。算法
2)贝叶斯分类器的理论基础是贝叶斯理论。网络
3)贝叶斯分类器的一种简单形式是朴素贝叶斯分类器,跟随机森林、神经网络等分类器都有可比的性能。性能
4)贝叶斯分类器是一种增量型的分类器。学习
第一次接触贝叶斯仍是本科学几率论的时候,那时候也就只知道作题目,没想到如今还可以在工做和学习中用到它,先复习下相关的基础几率公式吧:htm
1) 乘法定理:设P(B)>0,则有P(AB) = P(A|B)P(B).blog
2) 全几率公式:设试验E的样本空间为S,A为E的事件,若事件组B1,B2,…,Bn为S的一个划分,且P(Bi)> 0(i=1,2,…,n),则有事件
P(A) = P(A|B1)P(B1) + P(A|B2)P(B2) + …+ P(A|Bn)P(Bn).ci
注:在不少事件问题中P(A)不容易算出来,可是能够很容易的找到S的一个划分:B1,B2,…,Bn,而且P(Bi)和P(A|Bi)为已知或者容易算出,那么就能够根据上式求出P(A).get
3)贝叶斯公式:设试验E的样本空间为S,A为E的事件,B1,B2…,Bn为S的一个划分,且P(A)>0,P(Bi)>0(i=1,2,…,n),则有
P(Bi|A) = P(ABi)/P(A) = P(A|Bi)P(Bi)/∑P(A|Bi)P(Bi),i=1,2,…n.
举例:
X是一个待分类的数据元组,由n个属性描述;H是一个假设,例如X属于类C。对于分类问题,咱们想计算出几率P(H|X):即已知元组X的每一个元素对应的属性值,求出X属于C类的几率。
例如:X的属性值为:age=25,income=$5000,H对应的假设是:X会买电脑。
P(H|X):意思是在已知某客户信息age=25,income=$5000的条件下,该客户会买电脑的几率。
P(H):意思是对于任何给定的客户信息,该客户会购买电脑的几率。
P(X|H):意思是已知客户会买电脑,那么该客户的age=25,income=$5000的几率。
P(X):意思是在咱们全部的客户信息集合中,客户的age=25,income=$5000的几率。
因此:P(H|X) = P(X|H)P(H)/P(X)
朴素贝叶斯分类器的工做流程以下:
1:设D为样本训练集;每个样本X是由n个属性值组成的,X=(x1,x2,…xn);对应的属性集为A1,A2,A3…An;
2: 假设有m个类标签:C1,C2,…Cm.对于某待分类元X,朴素分类器会把P(Ci|X)(i=1,2,…m)值最大的那个类标签Ci认为是X的类别,即朴素贝叶斯分类器预测出X属于类Ci,当且仅当P(Ci|X)>P(Cj|X) (1≤j≤m,j≠i).所以咱们的目标就是找出P(Ci|X)中的最大值。
P(Ci|X) = P(X|Ci)P(Ci)/P(X)
对于给定的样本集,P(X)是常数,跟某个具体的类标签没有关联,因此要想找出P(Ci|X)的最大值也就是找出P(X|Ci)P(Ci)的最大值:
若是咱们不知道P(Ci)的值,咱们能够假设P(C1)=P(C2)=…=P(Cm),固然P(Ci)能够经过估计值来代替,P(Ci)=|Ci, D| /|D|
其中|D|为样本总数,|Ci,D|为D中属于类Ci的样本数。
3:若是n的值特别大,也就是说样本元有不少属性,那么对于P(X|Ci)的计算会至关复杂。因此在朴素贝叶斯中进行了一个假设:即对于样本元中的每一个属性,它们都互相条件独立。
对于P(xi|Ci)咱们能够从训练集中算出来,其中xi表明在某个具体样本中对应属性Ai的值。
P(xi|Ci)的计算分为两种状况:
1):若是属性Ai的值是分类变量(离散变量),那么P(xi|Ci)等于训练样本空间|D|中,属于类Ci而且对应属性Ai的值等于xi的数目除以样本空间中属于类Ci的样本数目。
2):若是Ai的值是连续型的变量,则P(xi|Ci)的计算会根据高斯分布来计算,设其中均值为μ,标准方差为σ:
4:为了预测X所属的类标签,咱们根据前面的步骤能够算出每个类标签Ci对应的P(X|Ci)P(Ci)值,当某一个类标签Ci有:
P(X|Ci)P(Ci)>P(X|Cj)P(Cj) 对于任意j: 1≤j≤m,j≠i
则咱们认为X属于类标签Ci.
这里咱们仍是用 分类算法之决策树 中的样本数据来进行举例:
样本空间D以下表所示:其中 |D|=14.
属性集合为A{age,come,student,credit_rating} 对应的属性个数n=4.
分类属性为:buys_computer,值为{yes,no} 即C1:buys_computer = yes;C2: buys_computer = no; 分类标签个数 m = 2;
有一待分类的数据元X={age<=30,income=medium,student=yes,credit_rating=fail}.
则根据朴素贝叶斯分类器的工做流程咱们能够计算出:
P(Ci):
P(buys_computer = “yes”) = 9/14 = 0.643
P(buys_computer = “no”) = 5/14= 0.357
P(xi|Ci):
P(age = “<=30” | buys_computer = “yes”) = 2/9 = 0.222
P(age = “<= 30” | buys_computer = “no”) = 3/5 = 0.6
P(income = “medium” | buys_computer = “yes”) = 4/9 = 0.444
P(income = “medium” | buys_computer = “no”) = 2/5 = 0.4
P(student = “yes” | buys_computer = “yes) = 6/9 = 0.667
P(student = “yes” | buys_computer = “no”) = 1/5 = 0.2
P(credit_rating = “fair” | buys_computer = “yes”) = 6/9 = 0.667
P(credit_rating = “fair” | buys_computer = “no”) = 2/5 = 0.4
P(X|Ci):
P(X|buys_computer = “yes”) = 0.222 x 0.444 x 0.667 x 0.667 = 0.044
P(X|buys_computer = “no”) = 0.6 x 0.4 x 0.2 x 0.4 = 0.019
P(X|Ci)*P(Ci) :
P(X|buys_computer = “yes”) * P(buys_computer = “yes”) = 0.028
P(X|buys_computer = “no”) * P(buys_computer = “no”) = 0.007
由于0.28>0.007因此X属于类:buys_computer = “yes”.
1:零几率问题
在上述的例子中假设在样本数据集中income = medium的样本数为0,那么P(income = “medium” | buys_computer = “yes”) 和
P(income = “medium” | buys_computer = “no”) 都将为0,那么在计算P(X|Ci)*P(Ci)时结果也为0,这样就很差决定X是属于哪个类。
对于这样的问题的一个解决方案叫作:Laplacian correction或者Laplacian estimator,是以一位法国数学家Pierre Laplace名字命名的。
它的具体作法就是给相应的属性的不一样值数目都加1:
假设:有1000个训练样本,其中income=low的数目为10,income=medium的数目为0,income=high的数目为990,则为了不零几率问题,咱们给每一种income的数目加1,及最后结果为 income =medium的数目为1,low的数目为11,high的数目为991.这样也就避免了零几率问题。
2:准确度问题
朴素贝叶斯分类器是基于样本属性条件独立的假设的前提下的,可是实际状况可能并不成立,这样也就缺失准确性了.
解决朴素贝叶斯准确性问题提出的一种方法叫作:贝叶斯网络(Bayesian Belief Networks ).这个方法留着下次学习。