伯努利朴素贝叶斯错误:ValueError:未知标签类型:(array([0, 0, 0, ..., 0, 0, 0], dtype=object),)

Posted

技术标签:

【中文标题】伯努利朴素贝叶斯错误:ValueError:未知标签类型:(array([0, 0, 0, ..., 0, 0, 0], dtype=object),)【英文标题】:Bernoulli Naive Bayes error: ValueError: Unknown label type: (array([0, 0, 0, ..., 0, 0, 0], dtype=object),) 【发布时间】:2017-05-01 23:22:09 【问题描述】:

我有两个从 sframe 获取的 numpy 数组 x 和 y,其中 x 有 6 个维度,y(目标变量)有一个维度。

x =np.array([[ 0 , 0 , 0, 24 ,0, 34], [ 0 , 0 , 0, 22 ,0, 34], ...])
y = np.array([[0], [0], [0], [1], [1], ...])

我正在使用 scikit-learn 来应用朴素贝叶斯分类器。当我尝试在朴素贝叶斯分类器中拟合 x 和 y 时,出现以下错误:

/home/.../local/lib/python2.7/site-packages/sklearn/utils/validation.py:526: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().

      Traceback (most recent call last):
  File "main_naive.py", line 10, in <module>
    main()
  File "main_naive.py", line 7, in main
    naive_bayes.predict()
  File "/home/.../naive_bayes_model.py", line 184, in predict
    self.naive_bayes.fit(x, y)
  File "/home/.../local/lib/python2.7/site-packages/sklearn/naive_bayes.py", line 566, in fit
    Y = labelbin.fit_transform(y)
  File "/home/.../local/lib/python2.7/site-packages/sklearn/base.py", line 494, in fit_transform
    return self.fit(X, **fit_params).transform(X)
  File "/home/.../local/lib/python2.7/site-packages/sklearn/preprocessing/label.py", line 304, in fit
    self.classes_ = unique_labels(y)
  File "/home/.../local/lib/python2.7/site-packages/sklearn/utils/multiclass.py", line 98, in unique_labels
    raise ValueError("Unknown label type: %s" % repr(ys))
ValueError: Unknown label type: (array([0, 0, 0, ..., 0, 0, 0], dtype=object),)

这是我的代码:

from sklearn.naive_bayes import BernoulliNB
naive_bayes = BernoulliNB(alpha=1e-2)
#x = self.training1[self.feature_columns].to_numpy()
#x = x.reshape(-len(self.feature_columns), len(self.feature_columns))
#y = self.training1[[target_column]].to_numpy()
#y = y.reshape(-1L,1L)    
x =np.array([[ 0 , 0 , 0, 24 ,0, 34], [ 0 , 0 , 0, 22 ,0, 34], ...])
y = np.array([[0], [0], [0], [1], [1], ...])    
naive_bayes.fit(x, y)

我哪里错了?

【问题讨论】:

发布完整的堆栈跟踪几乎总能帮助您更快地获得答案。此外,您发布的代码肯定与您拥有的代码不同(保证不会在当前状态下工作)。 我缺乏这方面的数学知识,但是现在当我运行你的代码时,我得到了一个不同的错误,这表明这个方法可能是为相同维度的数组设计的。 您的阵列形状错误,您有一个 2 x 6 阵列和一个 6 x 1 阵列。在scikit 中,输入是 (n_samples, n_features) xy 实际上都是二维的。 naive_bayes.fit 预计 y 为 1d。这可能是错误的根源。 【参考方案1】:

我发现了这个问题。这是因为 y 包含 'None' 值,所以我只是从 y 中删除了 None 值。

【讨论】:

以上是关于伯努利朴素贝叶斯错误:ValueError:未知标签类型:(array([0, 0, 0, ..., 0, 0, 0], dtype=object),)的主要内容,如果未能解决你的问题,请参考以下文章

NLTK 和 scikit-learn 中的伯努利朴素贝叶斯结果不同

分类-朴素贝叶斯(高斯多项式伯努利)

朴素贝叶斯:朴素贝叶斯定义朴素贝叶斯公式分解朴素贝叶斯分类流程高斯型朴素贝叶斯多项式朴素贝叶斯伯努利型朴素贝叶斯朴素贝叶斯预测概率校准朴素贝叶斯优缺点

机器学习-朴素贝叶斯(高斯多项式伯努利)

三种常用的朴素贝叶斯实现算法——高斯朴素贝叶斯伯努利朴素贝叶斯多项式朴素贝叶斯

朴素贝叶斯分类器伯努利模型