python学习_day20---朴素贝叶斯

一、算法介绍

朴素贝叶斯
有监督学习分类算法

二、算法原理

朴素贝叶斯分类(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
"""

猜你喜欢

转载自blog.csdn.net/weixin_45800653/article/details/121739323