1. 朴素贝叶斯理论基础
贝叶斯决策理论方法时统计模型决策中的一个基本方法,基本思想如下:
(1)已知类条件概率密度参数表达式和先验概率
(2)利用贝叶斯公式转换成后验概率
(3)根据后验概率大小进行决策分类
其实就是利用统计中的“条件概率”来进行分类的一种算法。古典概型的概率计算方法是穷举出所有的情况,然后看看每种情况的占比,这都是基于排列组合的方式去做的概率分析。
而朴素贝叶斯分类用的是条件概率,也就是在某些场景下(带有某些前提条件)或者某些背景条件的约束下发生的概率问题。
贝叶斯公式如下:设
D1、D2、D3.......Dn
为样本空间的
S
的一个划分,如果以
从上式可以推出 P(Dj|x)P(x)=P(x|Di)P(Di)
也就是在全样本空间下,发生x的概率乘以在发生x的情况下发生 Dj 的概率,等于发生 Dj 的概率乘以在发生 Dj 的情况下发生x的概率,如下图:
中间交集的部分就是上式等号两边各自表示的内容。但贝叶斯分类器通常有一个假设:给定目标值时属性之间相互条件独立。基于这种“朴素”的假设,贝叶斯公式一般写成:
P(A|B)P(B)=P(B|A)P(A)
。
对于上式有以下的说法:
- P(A) 叫做A事件的先验概率,就是一般情况下,认为A发生的概率
- P(B|A) 叫似然度,是A假设条件成立的情况下发生B的概率
- P(A|B) 叫做后验概率,在B发生的情况下发生A的概率,也就是要计算的概率。
- P(B) 叫标准化常量,和A的先验概率定义类似,就是一般情况下,B的发生概率。
2. 疾病的预测示例
这里用的是python的Scikit-learn库中的高斯朴素贝叶斯模型。
这里的示例只是简单的说明问题,忽略了其他的影响因素。所以在得到的训练样本给出了个体基因信息和个体的疾病信息,然后建模分析得到基因片段和患病之前的概率转换关系。
代码:
from sklearn.naive_bayes import GaussianNB
#疾病预测
#基因片段A 基因片段B 高血压 胆结石
#1: 是 0:否
data_table = [
[1, 1, 1, 0],
[0, 0, 0, 1],
[0, 1, 0, 0],
[1, 0, 0, 0],
[1, 1, 0, 1],
[1, 0, 0, 1],
[0, 1, 1, 1],
[0, 0, 0, 0],
[1, 0, 1, 0],
[0, 1, 0, 1]
]
#基因片段
X = [[1, 1], [0, 0], [0, 1], [1, 0], [1, 1], [1, 0], [0, 1], [0, 0], [1, 0], [0, 1]]
#高血压
y1 = [1, 0, 0, 0, 0, 0, 1, 0, 1, 0]
#训练
clf = GaussianNB().fit(X, y1)
#高血压预测
p = [[1, 0]]
print clf.predict(p)
#胆结石
y2 = [0, 1, 0, 0, 1, 1, 1, 0, 0, 1]
#训练
clf = GaussianNB().fit(X, y2)
#胆结石预测
p = [[1, 0]] # 要预测的用户
print clf.predict(p)
运行结果:
[0]
[0]
贝叶斯的理论体系其实是一种机器学习思想,而不是一种简单的套用公式。
参考:《白话大数据与机器学习》