python - 使用朴素贝叶斯计算测试数据的概率
问题描述
我正在使用以下代码使用朴素贝叶斯预测 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
。现在我想预测
SMSThis is a sample sms
是否是垃圾邮件。我不确定我做错了什么
因为最后一行应该给我一个概率。但它给了我以下输出
在此处输入图像描述
[[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。对于第一行:
9.99999987e-01 = 9.99999987 * 0.1 = 0.999999987
1.30424974e-08 = 1.30424974 * 0.00000001 = 0.000000013
因此,A 类短信的预测概率(这可能是垃圾邮件或非垃圾邮件,取决于代码的其余部分)为 0.999...,而 B 类短信的概率为 0.00....1
所以基本上NB以接近1的概率预测了那里的A类。例如,如果输出是 0.6 、 0.4 (输出矩阵的一行),那么您会知道 NB 以 0.6 的概率预测 A 类,以 0.4 的概率预测 B 类。例如,此附加信息可用于限制您的预测。
编辑:如果你不想要这个分数,用 .predict 替换 .predict_proba
推荐阅读
- php - POST 从 laravel 提交表单到 mysql
- python - 有没有办法在python中使用带有2个变量的for循环?
- python-3.x - 使用 PyQt5,如何使 QComboBox 可搜索?
- html - 在html中保存网页内容的问题
- python - Python Dataframe 提取多日当天的最后一次阅读
- scrapy - Scrapy spider 不会始终使用 CloseSpider 扩展终止
- excel - 通过对每 3 列求和来更新运行总计
- string - Dart/Flutter:每隔 n 个字符拆分字符串?
- c - 数组中的项地址变大导致溢出
- swift - 从服务器调用最佳实践更新视图控制器