这两天学习了一个相对比较简单但是十分实用的分类算法——贝叶斯分类算法,与我做项目使用的svm算法相比确实有很多精妙之处,。好比撒尿牛丸——好吃又好玩,而贝叶斯分类器则是简单又强大。本文结合简单天气预报进行讲解。
贝叶斯定理:
贝叶斯定理是概率论里面一个计算条件概率的法器!为什么是法器,且看后文。先摆出计算公式:
也许乍一看这公式没什么,但是我们先将公式移项得:P(A|B)P(B)=P(AB),此时再将A与B互换一下,发现什么没有?一个伟大的公式来了:
P(A|B)P(B)=P(AB)=P(B|A)P(A)
=>
整个分类算法的核心思路就是根据这个公式!为什么?且往下看!
什么是分类:
比如,如果将天气分为简单的晴天和雨天,那么晴天和雨天各为一个分类。那么,如何进行天气预报 ? 很简单,利用已知的一些大气特性!为了简化问题,这里假设大气对天气预报有用的属性只有空气湿度、云层密度两个特征属性。那么 天气预测就是: 提供某一天的空气湿度和云层密度两个属性值,输出一个晴天或雨天的结果!
朴素贝叶斯根据上述问题简化进行简单天气预测:
对于之前的天气预测问题的简化看起来和之前的公式没什么联系,但是请大家细看:
如果用H表示湿度,并且湿度分为1、2、3级分别表示为h1、h2、h3; 而云层密度用G表示,也分为1、2、3级,分别用g1、g2、g3表示;另外,天气W表示,分为1、2两级,晴天和雨天分别表示为w1、w2 。
那么,通过以往的数据我们可以统计出现晴天或者雨天结果时(条件),h和g出现的概率,即:P(
H | W)、和 P( G | W ) ,其中H、G、W在之前提到的分级值范围内取值, 如果空气湿度H和云层密度G 相对独立,那么天气预报转换为求:
P=P(W |G,H )=P(W|G)xP(W|H)
利用之前的公式转化为:
P=[P(G|W)P(W)/P(G)
]X[P(H|W)P(W)/P(H)]
上式的P(G|W) 、P(H|W) 为之前统计出的概率,而P(W)为天气为晴天和雨天的概率,可以统计出晴天概率P(W1)和雨天概率P(W2),而P(G)、P(H)对每一个分类类别为常数,比如不管H是1、2、3哪一种,P(H)都是常数(想想为什么?)
到此,我们就可以进行预测了!
天晴的概率:
P1=P(w1|G,H)=[P(G|W1)P(W1)/P(G)]X[P(H|W1)P(W1)/P(H)]
雨天的概率:
P2=P(w2|G,H)=[P(G|W2)P(W2)/P(G)]X[P(H|W2)P(W2)/P(H)]
其中等式的右边各个式子均为已知项,例如某天的湿度为h1,云层密度为g1,则课分别带入上面的公式,然后比较P1和P2的大小!
这样,就可以简单地预测天气了!
总结:贝叶斯可根据样本数据的概率统计而进行分类概率预测,在很多问题上可用,比如判断微博用户是否为僵尸账号!具体就不说了。
通用的朴素贝叶斯分类的正式定义如下:
1、设为一个待分类项,而每个a为x的一个特征属性。
2、有类别集合。
3、计算。
通常将P最大的项,作为目标分类。