python - 当预测变量不是二进制时,Sklearn 朴素贝叶斯伯努利分类器如何工作?
问题描述
正如我们所知,伯努利朴素贝叶斯分类器使用二元预测器(特征)。我没有得到的是 scikit-learn 中的 BernoulliNB 如何给出结果,即使预测变量不是二进制的。以下示例是从文档中逐字提取的:
import numpy as np
rng = np.random.RandomState(1)
X = rng.randint(5, size=(6, 100))
Y = np.array([1, 2, 3, 4, 4, 5])
from sklearn.naive_bayes import BernoulliNB
clf = BernoulliNB()
clf.fit(X, Y)
print(clf.predict(X[2:3]))
输出:
array([3])
以下是 的前 10 个特征X
,它们显然不是二元的:
3 4 0 1 3 0 0 1 4 4 1
1 0 2 4 4 0 4 1 4 1 0
2 4 4 0 3 3 0 3 1 0 2
2 2 3 1 4 0 0 3 2 4 1
0 4 0 3 2 4 3 2 4 2 4
3 3 3 3 0 2 3 1 3 2 3
即使预测变量不是二进制的,BernoulliNB 是如何在这里工作的?
解决方案
这是由于binarize
争论;来自文档:
二值化:浮动或无,默认=0.0
样本特征二值化(映射到布尔值)的阈值。如果没有,则假定输入已经由二进制向量组成。
当使用其默认值调用时binarize=0.0
,就像您的代码中的情况一样(因为您没有明确指定它),它将导致将X
大于 0 的每个元素转换为 1,因此转换后X
的将用作实际输入BernoulliNB 分类器确实由二进制值组成。
该binarize
参数的工作方式与同名的独立预处理函数完全相同;这是一个简化的示例,您可以自己调整:
from sklearn.preprocessing import binarize
import numpy as np
rng = np.random.RandomState(1)
X = rng.randint(5, size=(6, 1))
X
# result
array([[3],
[4],
[0],
[1],
[3],
[0]])
binarize(X) # here as well, default threshold=0.0
# result (binary values):
array([[1],
[1],
[0],
[1],
[1],
[0]])
推荐阅读
- php - Laravel 5.6:Auth::check() 在成功 Auth::login 后直接失败
- regex - 在 python 中,如何将正则表达式匹配类型(sre.SRE_Match)转换为 FLOATS?
- php - 使用数组作为函数参数的最佳实践是什么?
- java - Thymeleaf 中嵌套列表的表单绑定
- azure - 如何在数据工厂 V2 链接服务中连接现有网关
- r - 是否有任何类似的方法来对 Shiny 中的 excel 中的多列进行条件格式化
- javascript - 下拉菜单不适用于移动浏览器
- reactjs - 条件路由 - 异步
- dialogflow-es - 如何在 api.ai 对话流中将用户查询从一个代理路由到其他代理
- python - 获取作为列表列表的输出