如何解决当预测变量不是二进制时,Sklearn 朴素贝叶斯伯努利分类器如何工作?
众所周知,伯努利朴素贝叶斯分类器使用二元预测器(特征)。我没有得到的是 scikit-learn 中的 BernoulliNB 如何给出结果,即使预测变量不是二进制的。以下示例逐字取自 documentation:
import numpy as np
rng = np.random.RandomState(1)
X = rng.randint(5,size=(6,100))
Y = np.array([1,2,3,4,5])
from sklearn.naive_bayes import BernoulliNB
clf = BernoulliNB()
clf.fit(X,Y)
print(clf.predict(X[2:3]))
输出:
array([3])
以下是 X
的前 10 个特征,它们显然不是二进制的:
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
参数;来自docs:
二值化:浮动或无,默认=0.0
样本特征二值化(映射到布尔值)的阈值。如果没有,则假定输入已经由二进制向量组成。
当使用其默认值 binarize=0.0
调用时,就像您的代码中的情况一样(因为您没有明确指定它),它将导致 X
中大于 0 的每个元素都转换为 1 ,因此将用作 BernoulliNB 分类器的实际输入的转换后的 X
确实由二进制值组成。
binarize
参数的工作方式与独立的 preprocessing function of the same name 完全相同;这是一个简化的例子,适应你自己的:
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],[0]])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。