使用朴素贝叶斯计算测试数据的概率

时间:2021-08-01 15:33:05

标签: python scikit-learn naivebayes

我使用以下代码来预测使用朴素贝叶斯的 SMS 文本的输出

from sklearn.naive_bayes import MultinomialNB
mnb=MultinomialNB()
mnb.fit(X,Y)
X_test = np.array(['This is a sample sms'], dtype=object)

X_test_transformed = vec.transform(X_test)

X_test = X_transformed.toarray()

proba=mnb.predict_proba(X_test)
print(proba)

我在 X、Y 上使用 fit 函数训练模型。现在我想预测
SMS This is a sample sms 是否是垃圾邮件。我不确定我做错了什么
因为最后一行应该给我一个概率。但它给了我以下输出

enter image description here

 [[9.99999987e-01 1.30424974e-08]
 [9.99996703e-01 3.29712871e-06]
 [1.15232279e-22 1.00000000e+00]
 ...
 [9.62666043e-01 3.73339566e-02]
 [9.99984562e-01 1.54382674e-05]
 [9.66244280e-01 3.37557203e-02]]

1 个答案:

答案 0 :(得分:0)

请注意,对于每一行,这两个数字加起来为 1。对于第一行:

9.99999987e-01 = 9.99999987 * 0.1 = 0.999999987

1.30424974e-08 = 1.30424974 * 0.00000001 = 0.000000013

因此,A 类(这可能是垃圾邮件或火腿,取决于代码的其余部分)的此 sms 的预测概率为 0.999...而 B 类此 sms 的概率为 0.00.... 1

所以基本上 NB 以接近 1 的概率预测了 A 类。例如,如果输出为 0.6 , 0.4 (输出矩阵的一行),那么您就会知道 NB 以 0.6 的概率预测 A 类,以 0.4 概率预测 B 类。例如,此附加信息可用于确定您的预测阈值。

编辑:如果您不希望此分数将 .predict_proba 替换为 .predict