一、 第一次学习总结
1 前期准备
1.1 先验概率与后验概率
(1) 概念
先验概率:事情还没有发生,要求这件事情发生的可能性的大小。
是根据以往经验和分析得到的概率。
后验概率:事情已经发生,要求这件事情发生的原因是由某个因素引起的可能性的大小。
(2) 举例
先验概率:
- 骰子,我们都知道概率是1/6,而且无数次重复实验也表明是这个数,这是一种我们人的常识。
- 明天中午以前的温度分布。合理的方法是将之前的正态分布预期值等于今天的中午温度,其方差等于大气温度的日常变化,或者是一年中的那一天的温度分布。
后验概率:
- 桌子上如果有一块肉喝一瓶醋,你如果吃了一块肉,然后你觉得是酸的,那你觉得肉里加了醋的概率有多大?你说:80%可能性加了醋.OK,你已经进行了一次后验概率的猜测.
(3) 两者联系
先验概率的计算比较简单,没有使用贝叶斯公式;
而后验概率的计算,要使用贝叶斯公式,以先验概率为基础。
参考网址:
[1]先验概率_百度百科
[2]后验概率_百度百科
[3]贝叶斯公式的直观理解(先验概率/后验概率)_博客园
1.2 类条件概率(或称“似然”)
(1)概念
类条件概率密度函数P(X|wi)是指在已知某类别的特征空间中,出现特征值X的概率密度,指第wi类样品其属性X是如何分布的,换言之即,条件wi下出现X的概率密度。
(2)举例
全世界华人占地球上人口总数的20%,但各个国家华人所占当地人口比例是不同的。
参考文献:
[1] 类条件概率密度_百度百科
1.3 联合概率分布
联合概率分布简称联合分布,随机向量X=(X1,X2,…,Xm) 的概率分布,称为随机变量X1,X2,…,Xm的联合概率分布。
对于二维离散随机向量,设X和Y都是离散型随机变量, 和 分别是X和Y的一切可能的集合,则X和Y的联合概率分布可以表示为如右图的列联表,也可以表示为如下的函数形式:
参考网址:
[1]类条件概率_百度百科
1.4 调和平均数
调和平均数(harmonic mean)又称倒数平均数,是总体各统计变量倒数的算术平均数的倒数。
在数学中调和平均数与算术平均数都是独立的自成体系的。
参考网址:调和平均数_百度百科
2 贝叶斯定理
[1] 形象理解:贝叶斯定理_由来_CSDN博客
[2] 可怕的贝叶斯定理_调整因子_CSDN博客
[3] 书籍理解:《数据挖掘概念与技术》
[4] 贝叶斯定理_公式推导
下面是例8.4的简化表示,和关于贝叶斯定理的总结,个人觉得便于理解记忆:
二、第二次学习总结
1 朴素贝叶斯分类器
朴素贝叶斯分类器的高明之处就全在于上图中的(1)处。
朴素 :指假设特征之间相互独立。
接下来,我们改变一下(1)处:在判断病人感冒的概率之前,知道病人的特点有:打喷嚏、是个建筑工人。那公式(1),将变成下面的样子:
P
(
感
冒
∣
打
喷
嚏
⋂
建
筑
工
人
)
=
P
(
感
冒
∣
打
喷
嚏
)
P
(
感
冒
∣
建
筑
工
人
)
P(感冒|打喷嚏\bigcap建筑工人) = P(感冒|打喷嚏) P(感冒|建筑工人)
P(感冒∣打喷嚏⋂建筑工人)=P(感冒∣打喷嚏)P(感冒∣建筑工人)
然后再像(1)式那样,分别计算P(感冒|打喷嚏) 、P(感冒|建筑工人) 即可。
所以,贝叶斯分类器的好处就是,假设特征之间相互独立后,计算中有两处便可以使用特征独立条件下的公式了。
(1) 类条件概率独立:即上图中的式(1)
P
(
C
i
∣
X
1
⋂
X
2
.
.
.
⋂
X
m
)
=
P
(
C
i
∣
X
1
)
⋅
⋅
⋅
P
(
C
i
∣
X
m
)
P(C_i|X_1\bigcap{X_2}...\bigcap{X_m}) = P(C_i|X_1)\cdot\cdot\cdot P(C_i|X_m)
P(Ci∣X1⋂X2...⋂Xm)=P(Ci∣X1)⋅⋅⋅P(Ci∣Xm)
(2)事件独立:即图中的式(2)
P
(
A
⋂
B
)
=
P
(
A
)
P
(
B
)
P(A \bigcap B)=P(A)P(B)
P(A⋂B)=P(A)P(B)
2 拉普拉斯修正
考虑一个问题:在类条件概率独立公式中,如果没有符合Xj特征的样本呢?那么P(Ci|Xi)为0,其他不为0的特征构成的影响,都被消除了,清零了,没用了,这显然是不行的。
P
(
C
i
∣
X
1
⋂
X
2
.
.
.
⋂
X
m
)
=
P
(
C
i
∣
X
1
)
⋅
⋅
⋅
P
(
C
i
∣
X
m
)
P(C_i|X_1\bigcap{X_2}...\bigcap{X_m}) = P(C_i|X_1)\cdot\cdot\cdot P(C_i|X_m)
P(Ci∣X1⋂X2...⋂Xm)=P(Ci∣X1)⋅⋅⋅P(Ci∣Xm)
为了解决上面的问题,数学家拉普拉斯提出了一个办法:将每个分量的计数加1。(注意:是每个,即便只有一个特征的样本数为0,也全都要加1。
)在样本量很大时,这个办法造成的估计概率变化可以忽略不计。实际使用中,拉普拉斯修正增加的数值可以设置为任何一个值,通常加
λ
\lambda
λ(
0
<
λ
<
1
0<\lambda<1
0<λ<1)来代替简单加1。同时如果对N个计数都加上
λ
\lambda
λ,为了保证所有类的概率加和为1,这时分母也要加上
N
∗
λ
N*\lambda
N∗λ。
例如: 总样本数有1000个。
1.符合X1的样本有0个,X2的样本有990个,X3的样本有10个,那么
P(X1) = 0/1000=0
P(X2) = 990/1000=0.99
P(X3) = 10/1000=0.010
.
这里只有X1的样本有0个,但是需要给每个特征的样本数量都加1,并且分母需要加3*1。那么
P(X1) = (0+1)/1003=0.001
P(X2) = (990+1)/1003=0.998
P(X3) = (10+1)/1003=0.011
可以看出,样本数为1000的前提下,计数加1前后,估计概率的变化非常之小。若样本数更大,便更小了。
3 优缺点
优点(适用情况):
- 大规模数据集,分类效果稳健。
- 多分类任务,方便。
- 缺失数据、噪声数据,不敏感。
缺点: - 特征相互独立,在实际应用中往往不成立。所以特征数较多或特征间相关性较强时,分类效果一般。
- 含有大量数值特征的数据集,效果不好。
4 sklearn实现
#贝叶斯分类器
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
#准备数据集
data = load_breast_cancer()
features = data.data
feature_names = data.feature_names
labels = data.target
label_names = data.target_names
# 分离训练集和验证集
train_features,test_features,train_labels,test_labels = train_test_split(features,labels,test_size=0.33,random_state=42)
# 创建朴素贝叶斯分类器,并拟合数据
gnb = GaussianNB()
model = gnb.fit(train_features,train_labels)
#在验证集上预测,输出accuracy score、混淆矩阵、分类报告。
pre_test = gnb.predict(test_features)
print(pre_test)
print(accuracy_score(test_labels,pre_test))
print(confusion_matrix(test_labels,pre_test))
print(classification_report(test_labels,pre_test))
sklearn中有三种朴素贝叶斯分类器:
- GaussianNB
用于任意连续数据。 - BernoulliNB
输入数据为二分类数据。 - MultinomialNB
输入数据为计数数据,即每个特征代表某类对象的正数计数,比如一个单词在句子里出现的次数。
其中BernoulliNB、MultinomialNB主要用于文本数据分类。