#导入数据集生成工具
from sklearn.datasets import make_blobs
#导入贝努利贝叶斯模型
from sklearn.naive_bayes import BernoulliNB
#导入模型拆分工具
from sklearn.model_selection import train_test_split
import numpy as np
#生成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)
#使用贝努利贝叶斯模型拟合数据
nb = BernoulliNB()
nb.fit(X_train,y_train)
print('贝努利贝叶斯模型训练集得分:{:.3f}'.format(nb.score(X_train,y_train)))
print('贝努利贝叶斯模型训练集得分:{:.3f}'.format(nb.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
#用不同的背景色表示不同的分类
xx, yy = np.meshgrid(np.arange(x_min, x_max, .02),
np.arange(y_min, y_max, .02))
z = nb.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, edgecolors='k')
plt.scatter(X_test[:,0],X_test[:,1],c=y_test,cmap=plt.cm.cool,marker='*',
edgecolors='k')
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
plt.title("Classifier:BernoulliNB")
#显示分类结果
plt.show()
print(z)
np.unique(z)
#高斯朴素贝叶斯
#导入高斯贝叶斯模型
from sklearn.naive_bayes import GaussianNB
#用高斯贝叶斯模型拟合数据
gnb = GaussianNB()
gnb.fit(X_train,y_train)
print('模型训练集得分:{:.3f}'.format(gnb.score(X_test,y_test)))
#用不同的背景色表示不同的分类
z = gnb.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, edgecolors='k')
plt.scatter(X_test[:,0],X_test[:,1],c=y_test,cmap=plt.cm.cool,marker='*',
edgecolors='k')
#设置坐标轴范围
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
plt.title("Classifier:GaussiNB")
#显示分类结果
plt.show()
#导入多项式朴素贝叶斯
from sklearn.naive_bayes import MultinomialNB
#导入数据预处理工具MinMaxScaler
from sklearn.preprocessing import MinMaxScaler
#使用MinMaxScaler对数据进行预处理,使数据全部为非负值
scaler = MinMaxScaler()
scaler.fit(X_train)
X_train_scaled = scaler.transform(X_train)
X_test_scaled = scaler.transform(X_test)
#拟合处理过的数据
mnb = MultinomialNB()
mnb.fit(X_train_scaled,y_train)
print('模型训练集得分:{:.3f}'.format(mnb.score(X_test,y_test)))
#用不同的背景色表示不同的分类
z = mnb.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, edgecolors='k')
plt.scatter(X_test[:,0],X_test[:,1],c=y_test,cmap=plt.cm.cool,marker='*',
edgecolors='k')
#设置坐标轴范围
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
plt.title("Classifier:MultinomialNB")
#显示分类结果
plt.show()
|