predict()函数和predict_proba()函数

作者:欧新宇(Xinyu OU)

本文档所展示的测试结果,均运行于:Intel Core i7-7700K CPU 4.2GHz

最后修订: 2020-01-29


  • 载入威斯康星乳腺肿瘤数据集,并适合用Gaussian朴素贝叶斯进行建模
In [16]:
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import BernoulliNB 

cancer = load_breast_cancer()

X, y = cancer.data, cancer.target
X_train, X_test, y_train, y_test = train_test_split(X, y)

bnb = BernoulliNB()
bnb.fit(X_train, y_train)
Out[16]:
BernoulliNB(alpha=1.0, binarize=0.0, class_prior=None, fit_prior=True)
  • 给定一个样本:
In [17]:
data_id = 142
data_x = [X_test[data_id]]
data_y = y_test[data_id]

print("样本的正确分类为: {}".format(data_y))

print("GaussianNB模型预测的分类是: {}".format(bnb.predict(data_x)[0]))
print("+ 属于分类0的概率值是:{:.5f}".format(bnb.predict_proba(data_x)[0][0]))
print("+ 属于分类1的概率值是:{:.5f}".format(bnb.predict_proba(data_x)[0][1]))
样本的正确分类为: 0
GaussianNB模型预测的分类是: 1
+ 属于分类0的概率值是:0.37786
+ 属于分类1的概率值是:0.62214

此处,

  1. predict()函数,给出的是对样本 data_x 的预测结果,即每个类别概率最高的那个类的id
  2. predict_proba()函数,给出的是每一类的预测概率。即,对于样本 142 来说,分为类别【0】的概率为0.04742,分为类别【1】的概率为0.95258. predict_proba()给出的每个类别的预测概率之后等于1.

如果有数据包含n个类别,则predict()输出的仍然是概率最高的那个类别的id,而predict_proba()输出的将是这n个类别,每一个类别的预测概率。