朴素贝叶斯学习

贝努利朴素贝叶斯

这种方法比较适合于符合贝努利分布的数据集,贝努利分布也被称为“二项分布”也就是“0-1分布”。
下面用一个例子来说明:
假设有一组关于一些因素与下雨之间的联系,例如刮北风、闷热、多云、天气预报是否有雨等等。
再给7天是否下雨的数据。

#导入贝努力贝叶斯
from sklearn.naive_bayes import BernoulliNB
import numpy as np
X = np.array([[0,1,0,1],
            [1,1,1,0],
            [0,1,1,0],
            [0,0,0,1],
            [0,1,1,0],
            [0,1,0,1],
            [1,0,0,1]])
y = np.array([0,1,1,0,1,0,0])
nb = BernoulliNB()
nb.fit(X,y)
#预测一天,无刮风,不闷热,多云,天气预报预测没雨
Next_Day = [[0,0,1,0]]
pre = nb.predict(Next_Day)
print(pre)
if pre == [1]:
    print("下雨了,收衣服啦!")
else:
    print("今天又是美好的一天!")

预测结果为:
在这里插入图片描述
预测结果和之前分析的结果基本相同。

高斯朴素贝叶斯

高斯朴素贝叶斯,顾名思义,是假设样本的特征符合高斯分布,或者说符合正态分布时所用的算法。
下面以乳腺肿瘤数据集的例子来说明:

#导入威斯康星乳腺肿瘤数据集
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
cancer = load_breast_cancer()
X,y = cancer['data'],cancer['target']
X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=8)
nb = GaussianNB()
nb.fit(X_train,y_train)
#模型评分
print("========================")
print("训练集评分为:{:.3f}".format(nb.score(X_train,y_train)))
print("测试集评分为:{:.3f}".format(nb.score(X_test,y_test)))
print("========================")
#取第三百个样本来检测是否预测正确
print("模型预测的分类是:{}".format(nb.predict([X[300]])))
print("模型正确的分类是:",y[300])

运行结果为:
在这里插入图片描述
从结果上可以看出,模型得分和模型预测的准确性都还是挺不错的。事实上,高斯朴素贝叶斯也确实是能够胜任大部分的分类任务。因为在自然科学和社会领域,有大量的现象都是呈现正态分布的。

多项式朴素贝叶斯

从其名字可以看出来它主要是用来拟合多项式分布的数据集,多项式朴素贝叶斯要求输入的X值是非负的,所以在输入数据时需要进行预处理,将其变为非负的才行。
下面就对其做一个简单的评分测试:

from sklearn.datasets import make_blobs
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.preprocessing import MinMaxScaler
#生成样本数为500,分类数为5的数据集
X,y = make_blobs(n_samples=500,centers=5,random_state=8)
#划分训练集、测试集
X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=8)
#预处理
scaler = MinMaxScaler()
scaler.fit(X_train)
X_train_scaled = scaler.transform(X_train)
X_test_scaled = scaler.transform(X_test)
print(X_train_scaled)
mnb = MultinomialNB()
mnb.fit(X_train_scaled,y_train)
print("==============================")
print("模型得分:{:.3f}".format(mnb.score(X_test_scaled,y_test)))
print("==============================")

运行结果为:
在这里插入图片描述
从结果可以看出,虽然经过了预处理将所有特征值转换为非负的,但是多项式朴素贝叶斯还是不能获得较高的分数。

总结

本次学习了朴素贝叶斯算法和它的几种变体-贝努利朴素贝叶斯、高斯朴素贝叶斯和多项式朴素贝叶斯。其中贝努利朴素贝叶斯适合于二项式分布的数据集,而多项式朴素贝叶斯适合计数类型的数据集,即非负、离散数值的数据集,而高斯朴素贝叶斯适合的就比较广,可以应用于任何连续数值型的数据集中,尤其在符合正态分布的数据集中表现更好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值