一、算法介绍
朴素贝叶斯
有监督学习分类算法
二、算法原理
朴素贝叶斯分类(NBC)是以贝叶斯定理为基础并且假设特征条件之间相互独立的方法,先通过已给定的训练集,以特征词之间独立作为前提假设,学习从输入到输出的联合概率分布,再基于学习到的模型,输入X求出使得后验概率最大的输出Y
三、算法特点
1、算法的逻辑性简单,算法较为稳定
2、数据集独立性不好,分类效果就不好
四、三种朴素贝叶斯
由贝叶斯定理,基于样本特征之间相互独立的假设(在根据特征预测标签时,朴素贝叶斯算法假定特征和特征之间没有关系,
而假定特征相互独立之后,会让问题变得简单,simple - Naive 朴素–就是简单)
假定特征相互独立之后,让效率变高
三种朴素贝叶斯
特征值不同,选择不同的朴素贝叶斯算法
1、伯努利朴素贝叶斯
伯努利分布:特征值只有0 or 1取值
2、高斯朴素贝叶斯
高斯分布(正态分布)
高斯在观察数据中发现有一个现象(一种数据分布);关于均值对称,这种数据成为正态分布的数据
正态分布 normal 正常分布、常见分布
生活中大部分现象都是满足 or 近似 正态分布
3、多项式朴素贝叶斯
多项式分布:特征值[是非负数] 0 1 2 3 4…
文本分类
五、三种朴素贝叶斯
from sklearn.naive_bayes import BernoulliNB # 伯努利朴素贝叶斯
from sklearn.naive_bayes import GaussianNB # 高斯朴素贝叶斯
from sklearn.naive_bayes import MultinomialNB # 多项式朴素贝叶斯
from sklearn.datasets import make_blobs
from sklearn.model_selection import train_test_split
"""
# 是1 否0
X = [[0, 1, 0],
[1, 1, 1],
[0, 1, 1],
[0, 0, 0],
[1, 0, 1],
[0, 2, 0],
[1, 0, 0]]
y = [0, 1, 1, 0, 1, 0, 0]
alg = BernoulliNB()
alg.fit(X, y)
dict1 = {0: "不下雨", 1: "下雨"}
# 预测
# 天气信息 没有刮北风,不闷热 多云 0 0 1
pred = alg.predict([[0, 0, 1]])[0]
print(pred, dict1[pred])
proba = alg.predict_proba([[0, 0, 1]])
print("概率", proba)
# 如果特征值不是0 or 1 ,但仍然使用伯努利朴素贝叶斯; sklearn中会讲数据转换为0 0r 1
"""
# 产生一些高斯分布的数据集
X, y = make_blobs(n_samples=500, n_features=2, centers=5, random_state=1)
# print(X)
# print(y)
X_train, X_test, y_train, y_test = train_test_split(X,
y,
test_size=0.2,
random_state=1,
stratify=y # 等比例拆分
)
# alg = BernoulliNB()
alg = GaussianNB()
# alg = MultinomialNB()
alg.fit(X_train, y_train)
print("准确率", alg.score(X_test, y_test))
"""
在满足高斯分布的数据集上
使用伯努利朴素贝叶斯,准确率0.4
使用高斯朴素贝叶斯 , 准确率0.96
"""