2017-02-04 114 views
1

我想繪製高斯樸素貝葉斯分類器的決策表面。我似乎在訓練分類器時遇到了一些問題。我對機器學習也很陌生。SciKit學習 - 訓練高斯樸素貝葉斯分類器

首先我生成100個隨機點,其中一半具有不同的座標和標籤。

for i in range(50): 
    point1.append([np.random.randint(50,80),np.random.randint(50,80)]) 
    point1L.append(1) 
for i in range(50): 
    point2.append([np.random.randint(10,40),np.random.randint(10,70)]) 
    point2L.append(0) 

然後我訓練它。

clf = GaussianNB() 
clf.fit(point1,point1L) 
clf.fit(point2, point2L) 

然後我遇到了一個問題。我在這裏的分類器似乎不能區分這兩點。

print(clf.predict([np.random.randint(50,80),np.random.randint(50,80)])) 
print(clf.predict([np.random.randint(10,40),np.random.randint(10,70)])) 

結果我得到這個似乎總是:

[0] 
[0] 

我在做什麼錯了,我該如何解決?

在附註上,我還想知道是否可以直接從分類器本身繪製決策邊界,而不是通過比較分類器在每個點處的決策。

+0

只是將「fit(x,y)」切換到「partial_fit(x,y,[0,1])」,它將起作用 – lejlot

回答

0

fit()方法應該只調用一次。您撥打fit方法兩次,一方爲point1,另一方爲point2。所以,當你再次調用fit()point2,估計自身重置,僅用於訓練point2L,這是0.這就是爲什麼你的預言始終爲0 首先結合point1point2到一個新的矩陣,(同爲標籤),然後在新的矩陣上調用fit方法。

+0

哦,我明白了。它現在正常工作。非常感謝! –