朴素贝叶斯算法学习与仿真
一、朴素贝叶斯的优缺点
优点:
- 能够简单快捷地进行预测。
- 当独立假设成立时,朴素贝叶斯比其他模型相比性能更好,所需数据也更少。
- 与数值变量相比,分类输入变量的情况下该模型性能更好。
缺点:
- 对于分类输入变量来说,如果在训练样本中未出现,那么该模型认为该变量出现概率为0,并且不能作出预测。
- 我们可以用拉普拉斯平滑来解决这个问题。
- 朴素贝叶斯不是一个精确的预测模型,因此其预测结果只能作为一个大致的估计。 朴素贝叶斯要求输入变量必须独立,而生活中完全独立的变量几乎没有。
应用:
- 实时预测
- 多类预测
- 邮件分类
- 推荐系统
二、朴素贝叶斯的基本原理
设一个训练集S={(Xi,Yi)},i=1,…,m,Y={0,1}
我们对似然性进行假设:X|Y~N(u,o),即属于正态分布(也可以设为伯努利、多项式分布)
由贝叶斯公式有:
P(Y|X)是输出Y的后验概率
P(X)是输入X的先验概率
P(X|Y)是输出的似然性
我们根据训练集训练出的模型,就可以用来预测,新进来的一个输入X时,输出Y的概率P(Y|X)是多少了。
三、建模
以二维高斯函数为例:
输入有两个特征X1,X2,
∵Y={0,1},设Y~Bernoulli(ɸ)
又假设X|Y属于正态分布,则:
其中Ʃ表示协方差矩阵,u是均值,是一个2*1的矩阵,u可以由对应的X直接求平均得到
∵本次仿真只考虑朴素贝叶斯,所以X1,X2独立
由上述表达式有,预测值:
补充:高维联合高斯函数的概率密度计算
四、 源代码
代码1:(来自网络)
#Import Library of Gaussian Naive Bayes model
from sklearn.naive_bayes import GaussianNB
import numpy as np
#assigning predictor and target variables
x= np.array([[-3,7],[1,5], [1,2], [-2,0], [2,3], [-4,0], [-1,1], [1,1], [-2,2], [2,7], [-4,1], [-2,7]])
y = np.array([3, 3, 3, 3, 4, 3, 3, 4, 3, 4, 4, 4])
#Create a Gaussian Classifier
model = GaussianNB()
# Train the model using the training sets
model.fit(x, y)
#Predict Output
predicted= model.predict([[1,2],[3,4],[-3,7],[-4,0]])
print