首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ValueError in sklearn.naive_bayes.GaussianNB

ValueError in sklearn.naive_bayes.GaussianNB
EN

Stack Overflow用户
提问于 2017-05-19 17:05:30
回答 1查看 1.8K关注 0票数 0

我开始学习机器学习。所以我从天真的贝斯开始

我的python脚本

代码语言:javascript
复制
import numpy as np
x = np.array([[0,0],[1,1],[0,1],[1,0]])
y = np.array([0,0,1,1])
print(x)
from sklearn.naive_bayes import GaussianNB
clf = GaussianNB()
x = x.reshape(1,-1)
y = y.reshape(1,-1)
clf.fit(x,y)
a = clf.predict([[1,1]])
print(a)

我所犯的错误是

代码语言:javascript
复制
[[0 0]
[1 1]
[0 1]
[1 0]]
Traceback (most recent call last):
  File "ex.py", line 9, in <module>
    clf.fit(x,y)
  File "/usr/local/lib/python2.7/dist-packages/sklearn/naive_bayes.py", line 182, in fit
    X, y = check_X_y(X, y)
  File "/usr/local/lib/python2.7/dist-packages/sklearn/utils/validation.py", line 526, in check_X_y
    y = column_or_1d(y, warn=True)
  File "/usr/local/lib/python2.7/dist-packages/sklearn/utils/validation.py", line 562, in column_or_1d
    raise ValueError("bad input shape {0}".format(shape))
ValueError: bad input shape (1, 4)

我该怎么办?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-20 08:30:11

正如我在评论中所说,没有必要重塑。在此之前(即在您提供的代码中不存在)之前会得到此错误,因为您的代码是在此之后工作的。

考虑到您总是获得0作为预测的部分,这是由于您的数据。朴素贝叶斯需要更多的样本来分离类,对于一个非线性问题,每个类需要两个样本是不够的。

代码语言:javascript
复制
import numpy as np
from sklearn.naive_bayes import GaussianNB

def GNB(x,y):
    clf = GaussianNB()
    clf.fit(x,y)
    a = clf.predict(x)
    print(a)

x = np.array([[0,0],[1,1],[0,1],[1,0]])
y = np.array([0,0,1,1])
GNB(x,y)
# Output : [0,0,0,0]

x = np.array([[0,0],[0,1],[1,1],[1,0],[3,4],[-2,2],[-3,2],[-4,-2]])
y = np.array([0,0,0,0,1,1,1,1])
GNB(x,y)
# [0 0 0 0 1 1 1 1]

看看我的两个例子。在第一种情况下(您提供的),NB没有成功分离的数据。在第二个例子中(仍然是非线性的),由于有足够数量的样本,NB成功地返回了正确的类。

为了清晰起见,我创建了一个函数,但是您只需向示例中添加更多的示例,您就会发现它是有效的。希望这对解决你的问题有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44075463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档