朴素贝叶斯可以分为贝努利贝叶斯(BernoulliNB)、高斯贝叶斯(GaussianNB)和多项式贝叶斯(MultinomailNB)。贝努利贝叶斯(BernoulliNB)又可以分为二项分布和0-1分布。我们首先来介绍贝努利贝叶斯(BernoulliNB)。
7.3 贝努利贝叶斯(BernoulliNB)
7.3.1 属性与方法
class sklearn.naive_bayes.BernoulliNB(*, alpha=1.0, binarize=0.0, fit_prior=True, class_prior=None)
属性 |
解释 |
class_count_ |
ndarray of shape (n_classes)拟合期间遇到的每个类的样本数。 |
class_log_prior_ |
ndarray of shape (n_classes)当提供时,该值由样本重量加权。 |
classes_ |
ndarray of shape (n_classes,)每类的对数概率(平滑)。 |
coef_ |
ndarray of shape (n_classes, n_features)分类器已知的类标签反射镜的特征是把伯努利谱解释为一个线性模型。 |
feature_count_ |
ndarray of shape (n_classes, n_features)拟合期间每个(类、特征)遇到的样本数。 |
feature_log_prob_ |
ndarray of shape (n_classes, n_features)当提供时,该值由样本重量加权。给定一类特征的经验对数概率P(x|i|y)。 |
intercept_ |
ndarray of shape (n_classes,)镜像类logprior,用于将BernoulliNB解释为线性模型。 |
n_features_ |
int每个样本的特征数。 |
方法
fit(X, y[, sample_weight]) |
根据X,y拟合朴素贝叶斯分类器 |
get_params([deep]) |
获取此估计器的参数。 |
partial_fit(X, y[, classes, sample_weight]) |
对一批样品进行增量拟合。 |
predict(X) |
对测试向量X的数组执行分类。 |
predict_log_proba(X) |
测试向量X的返回对数概率估计。 |
predict_proba(X) |
测试向量X的返回概率估计。 |
score(X, y[, sample_weight]) |
返回给定测试数据和标签的平均精度。 |
set_params(**params) |
设置此估计器的参数。 |
7.3.2用贝努利贝叶斯make_blobs
def bernoulliNB_for_make_blobs(): myutil = util() X,y = make_blobs(n_samples=500,centers=8, random_state=8) X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=8) nb = BernoulliNB() nb.fit(X,y) title = "贝努利贝叶斯 make_blobs" myutil.draw_scatter(X,y,nb,title) myutil.print_scores(nb,X_train,y_train,X_test,y_test,title) myutil.plot_learning_curve(BernoulliNB(),X,y,title) myutil.show_pic(title)
输出
贝努利贝叶斯 make_blobs: 38.13% 贝努利贝叶斯 make_blobs: 37.60%
用贝努利贝叶斯make_blobs效果不是很好。
7.3.3用贝努利贝叶斯分析鸢尾花数据
def bernoulliNB_for_iris(): myutil = util() X,y = datasets.load_iris().data,datasets.load_iris().target X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=8) nb = BernoulliNB() nb.fit(X,y) title = "贝努利贝叶斯 鸢尾花" myutil.print_scores(nb,X_train,y_train,X_test,y_test,title) myutil.plot_learning_curve(BernoulliNB(),X,y,title) myutil.show_pic(title)
输出
贝努利贝叶斯 鸢尾花: 33.04% 贝努利贝叶斯 鸢尾花: 34.21%
用贝努利贝叶斯分析鸢尾花数据效果不是很好。
7.3.4用贝努利贝叶斯分析红酒数据
def bernoulliNB_for_wine(): myutil = util() X,y = datasets.load_wine().data,datasets.load_wine().target X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=8) nb = BernoulliNB() nb.fit(X,y) title = "贝努利贝叶斯 红酒" myutil.print_scores(nb,X_train,y_train,X_test,y_test,title) myutil.plot_learning_curve(BernoulliNB(),X,y,title) myutil.show_pic(title)
输出
贝努利贝叶斯 红酒: 41.35% 贝努利贝叶斯 红酒: 35.56%
用贝努利贝叶斯分析红酒数据效果也不是很好
7.3.5用贝努利贝叶斯分析乳腺癌数据
def bernoulliNB_for_breast_cancer(): myutil = util() X,y = datasets.load_breast_cancer().data,datasets.load_breast_cancer().target X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=8) nb = BernoulliNB() nb.fit(X,y) title = "贝努利贝叶斯 乳腺癌" myutil.print_scores(nb,X_train,y_train,X_test,y_test,title) myutil.plot_learning_curve(BernoulliNB(),X,y,title) myutil.show_pic(title)
输出
贝努利贝叶斯 乳腺癌: 63.85% 贝努利贝叶斯 乳腺癌: 59.44%
用贝努利贝叶斯分析乳腺癌数据效果仍旧不是很好。
7.4 高斯贝叶斯(GaussianNB)
7.4.1 属性与方法
类
classsklearn.naive_bayes.GaussianNB(*, priors=None, var_smoothing=1e-09)
属性
属性 |
解释 |
class_count_ |
ndarray of shape (n_classes,)每类观察到的训练样本数。 |
class_prior_ |
ndarray of shape (n_classes,)每一类的概率。 |
classes_ |
ndarray of shape (n_classes,)分类器已知的类标签 |
epsilon_ |
float方差的绝对加和值 |
sigma_ |
ndarray of shape (n_classes, n_features)每类特征的方差 |
theta_ |
ndarray of shape (n_classes, n_features)每类特征的平均值 |
方法
fit(X, y[, sample_weight]) |
根据X,y拟合高斯朴素贝叶斯 |
get_params([deep]) |
获取此估计器的参数。 |
partial_fit(X, y[, classes, sample_weight]) |
对一批样品进行增量拟合。 |
predict(X) |
对测试向量X的数组执行分类。 |
predict_log_proba(X) |
测试向量X的返回对数概率估计。 |
predict_proba(X) |
测试向量X的返回概率估计。 |
score(X, y[, sample_weight]) |
返回给定测试数据和标签的平均精度。 |
set_params(**params) |
设置此估计器的参数。 |
7.4.2用高斯贝叶斯make_blobs
def bernoulliNB_for_make_blobs(): myutil = util() X,y = make_blobs(n_samples=500,centers=8, random_state=8) X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=8) nb = GaussianNB () nb.fit(X,y) title = "高斯贝叶斯 make_blobs" myutil.draw_scatter(X,y,nb,title) myutil.print_scores(nb,X_train,y_train,X_test,y_test,title) myutil.plot_learning_curve(BernoulliNB(),X,y,title) myutil.show_pic(title)
输出
高斯贝叶斯 make_blobs: 85.60% 高斯贝叶斯 make_blobs: 92.00%
用高斯贝叶斯make_blobs效果还是不错的。
7.3.3用高斯贝叶斯分析鸢尾花数据
def bernoulliNB_for_iris(): myutil = util() X,y = datasets.load_iris().data,datasets.load_iris().target X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=8) nb = GaussianNB() nb.fit(X,y) title = "高斯贝叶斯 鸢尾花" myutil.print_scores(nb,X_train,y_train,X_test,y_test,title) myutil.plot_learning_curve(GaussianNB(),X,y,title) myutil.show_pic(title)
输出
高斯贝叶斯 鸢尾花: 98.21% 高斯贝叶斯 鸢尾花: 89.47%
用高斯贝叶斯分析鸢尾花数据效果仍旧很好。
7.3.4用高斯贝叶斯分析红酒数据
def bernoulliNB_for_wine(): myutil = util() X,y = datasets.load_wine().data,datasets.load_wine().target X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=8) nb = GaussianNB() nb.fit(X,y) title = "高斯贝叶斯 红酒" myutil.print_scores(nb,X_train,y_train,X_test,y_test,title) myutil.plot_learning_curve(GaussianNB(),X,y,title) myutil.show_pic(title)
输出
高斯贝叶斯 红酒: 99.25% 高斯贝叶斯 红酒: 97.78%
用高斯贝叶斯分析红酒数据效果仍旧很好
7.3.5用高斯贝叶斯分析乳腺癌数据
def bernoulliNB_for_breast_cancer(): myutil = util() X,y = datasets.load_breast_cancer().data,datasets.load_breast_cancer().target X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=8) nb = GaussianNB() nb.fit(X,y) title = "高斯贝叶斯 乳腺癌" myutil.print_scores(nb,X_train,y_train,X_test,y_test,title) myutil.plot_learning_curve(GaussianNB(),X,y,title) myutil.show_pic(title)
输出
高斯贝叶斯 乳腺癌: 94.37% 高斯贝叶斯 乳腺癌: 93.71%
用高斯贝叶斯分析乳腺癌数据效果仍旧很好。