簡體   English   中英

sklearn.naive_bayes.GaussianNB中的ValueError

[英]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作為預測的部分,這是由於您的數據。 朴素貝葉斯需要更多樣本來分離類別,對於一個非線性問題,每個類別兩個樣本是不夠的。

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成功返回了正確的類。

為了清楚起見,我創建了一個函數,但是您可以在示例中添加更多示例,您將看到它可以正常工作。 希望這對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM