def b1():
'''朴素贝叶斯算法是有监督学习算法,朴素贝叶斯算法分类为:贝努利朴素贝叶斯,高斯朴素贝叶斯,多项式朴素贝叶斯'''
#利用贝努利朴素贝叶斯(二项分布)对手工数据进行分析
#导入数据集生成工具,make_blobs用来生成手工数据集的
from sklearn.datasets import make_blobs
from sklearn.model_selection import train_test_split
#生成样本量为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)
#导入贝努利朴素贝叶斯
from sklearn.naive_bayes import BernoulliNB
ber=BernoulliNB()
ber.fit(x_train,y_train)
print('贝努利朴素贝叶斯得分:','%.3f'%ber.score(x_test,y_test))
#导入画图工具,将其可视化
import matplotlib.pyplot as plt
x_min,x_max=x[:,0].min()-0.5,x[:,0].max()+0.5
y_min,y_max=x[:,1].min()-0.5,x[:,1].max()+0.5
import numpy as np
xx,yy=np.meshgrid(np.arange(x_min,x_max,.02),np.arange(y_min,y_max,.02))
z=ber.predict(np.c_[(xx.ravel(),yy.ravel())]).reshape(xx.shape)
plt.pcolormesh(xx,yy,z,cmap=plt.cm.Pastel1)
#将训练集和测试集用散点图表示
plt.scatter(x_train[:,0],x_train[:,1],c=y_train,cmap=plt.cm.cool,marker='o',edgecolors='k')
plt.scatter(x_test[:, 0], x_test[:, 1], c=y_test, cmap=plt.cm.cool,marker='*',edgecolors='y')
plt.xlim()
plt.ylim()
plt.title('BernoulliNB')
plt.show()
'''利用高斯朴素贝叶斯进行测试'''
from sklearn.datasets import make_blobs
from sklearn.model_selection import train_test_split
# 生成样本量为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)
# 导入贝努利朴素贝叶斯
from sklearn.naive_bayes import GaussianNB
gauss = GaussianNB()
gauss.fit(x_train, y_train)
print('贝努利朴素贝叶斯得分:', '%.3f' % gauss.score(x_test, y_test))
# 导入画图工具,将其可视化
import matplotlib.pyplot as plt
x_min, x_max = x[:, 0].min() - 0.5, x[:, 0].max() + 0.5
y_min, y_max = x[:, 1].min() - 0.5, x[:, 1].max() + 0.5
import numpy as np
xx, yy = np.meshgrid(np.arange(x_min, x_max, .02), np.arange(y_min, y_max, .02))
z = gauss.predict(np.c_[(xx.ravel(), yy.ravel())]).reshape(xx.shape)
plt.pcolormesh(xx, yy, z, cmap=plt.cm.Pastel1)
# 将训练集和测试集用散点图表示
plt.scatter(x_train[:, 0], x_train[:, 1], c=y_train, cmap=plt.cm.cool, marker='o', edgecolors='k')
plt.scatter(x_test[:, 0], x_test[:, 1], c=y_test, cmap=plt.cm.cool, marker='*', edgecolors='k')
plt.xlim()
plt.ylim()
plt.title('GaussianNB')
plt.show()
'''当我们利用多项式朴素贝叶斯测试'''
#必须记住x即特征值智能时非负的
#需要进行数据的预处理
from sklearn.naive_bayes import MultinomialNB
#导入数据预处理工具
from sklearn.preprocessing import MinMaxScaler#MinMaxScaler的作用是将数据集中的特征值全部转换为0~1之间
scaler=MinMaxScaler()
scaler.fit(x_train)#只需要对x进行拟合,因为必须记住x即特征值智能时非负的
x_train_scaler=scaler.transform(x_train)
x_test_scaler=scaler.transform(x_test)
mul=MultinomialNB()
mul.fit(x_train_scaler,y_train)
print('模型得分:','%.2f'%mul.score(x_test_scaler,y_test))
z = mul.predict(np.c_[(xx.ravel(), yy.ravel())]).reshape(xx.shape)
plt.pcolormesh(xx, yy, z, cmap=plt.cm.Pastel1)
# 将训练集和测试集用散点图表示
plt.scatter(x_train[:, 0], x_train[:, 1], c=y_train, cmap=plt.cm.cool, marker='o', edgecolors='k')
plt.scatter(x_test[:, 0], x_test[:, 1], c=y_test, cmap=plt.cm.cool, marker='*', edgecolors='k')
plt.xlim()
plt.ylim()
plt.title('MultinomialNB')
plt.show()
'''以上可知,多项式朴素贝叶斯只适合对非负离散数值进行分类'''
b1()
代码运行结果如下:
贝努利朴素贝叶斯得分: 0.544
高斯朴素贝叶斯得分: 0.968
多项式朴素贝叶斯模型得分: 0.32