sklearn.naive_bayes.GaussianNB 中的值错误
ValueError in sklearn.naive_bayes.GaussianNB
我开始学习机器学习。
所以我从朴素贝叶斯开始
我的python脚本
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)
我得到的错误是
[[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)
我该怎么办?
正如我在评论中所说,无需重塑。你之前得到这个错误(即没有你提供的代码)因为你的代码在那之后工作。
考虑到您始终获得 0 的部分作为预测,这是由于您的数据。朴素贝叶斯需要更多样本来分离 classes,对于非线性问题,每个 class 两个样本是不够的。
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 成功 return 正确的 classes 因为有足够数量的样本。
为了清楚起见,我创建了一个函数,但您可以向您的示例中添加更多示例,您会发现它可以正常工作。
希望这有助于解决您的问题。
我开始学习机器学习。
所以我从朴素贝叶斯开始
我的python脚本
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)
我得到的错误是
[[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)
我该怎么办?
正如我在评论中所说,无需重塑。你之前得到这个错误(即没有你提供的代码)因为你的代码在那之后工作。
考虑到您始终获得 0 的部分作为预测,这是由于您的数据。朴素贝叶斯需要更多样本来分离 classes,对于非线性问题,每个 class 两个样本是不够的。
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 成功 return 正确的 classes 因为有足够数量的样本。
为了清楚起见,我创建了一个函数,但您可以向您的示例中添加更多示例,您会发现它可以正常工作。 希望这有助于解决您的问题。