朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法,朴素贝叶斯分类器有着坚实的数学基础与稳定的分类效率,而且所需估计的参数很少,对缺失数据不太敏感。理论上,朴素贝叶斯分类器模型与其他分类方法相比具有最小的误差率。
朴素贝叶斯中的朴素是认为各个特征或者属性条件之间相互独立,这种假设在实际中有时并不成立,因此分类并不稳定,贝叶斯代表根据贝叶斯定理构建分类模型
贝叶斯算法:
P(A|B)=P(B|A)*P(A)/P(B)
P(B) 为先验概率 P(B|A)为相对于B的条件概率 P(B)为B生成的概率
python中 scikit-learn库的使用
在Scikit-learn库中,根据特征的先验概率模型分为GaussianNB(先验为高斯分布)、MultinomialNB(先验为多项式分布)与BernoulliNB(先验为伯努利分布)等3个朴素贝叶斯分类算法类。
如果样本特征分布大部分是连续值,使用GaussianNB较好;
如果样本特征分布大部分是多元离散值,使用MultinomialNB较为合适;
如果样本特征是二元离散值或者很稀疏的多元离散值,应该使用BernoulliNB。
以GaussianNB为例构建朴素贝叶斯模型
导入 GaussianNB字库:
from sklearn.naive_bayes import GaussianNB
构建朴素贝叶斯分类器对象:
nb = GaussianNB()
nb.fit(x,y):根据样本x与类别标识y对数据进行拟合。
nb. predict(x):输出测试集x的预测类别。
nb. predict_proba(x):输出测试集x在各个类别上预测概率。
应用实例:根据天气情况预测是否适合打网球的概率
from sklearn.naive_bayes import GaussianNB
import numpy as np
# 天气晴为1,多云为2,雨为3
# 气温热为1 适中为2 冷为3
# 有风为1 无风为0
# [天气,气温,是否有风]
X = np.array([[1,1,1],[2,1,0],[3,2,0],[3,3,0],[3,3,1],
[2,3,1],[1,2,0],[1,3,0],[3,2,0],[1,2,1],[2,2,1],[2,1,0],[3,2,1],[1,1,0]])
# 适合打网球为1 不适合为0
Y = np.array([1,1,0,0,0
,0,1,0,0,1,1,1,0,1])
model = GaussianNB() # 构建模型
model.fit(X,Y) # 拟合数据
x_text=np.array([[1,2,0],[1,1,0]])
ptedict = model.predict(x_text) # 预测测试数据否适合打网球
print(ptedict) #输出为[1 1]
proba= model.predict_proba([[1,2,0]]) #适合打网球的概率
print(proba) #[[0.08798276 0.91201724]] 不适合打网球的概率为0.08798276 适合打网球的概率为0.91201724