我正在尝试绘制高斯朴素贝叶斯分类器的决策面。然而,在训练分类器时我遇到了一些问题。我对机器学习也非常陌生。
首先,我生成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]
我做错了什么,如何解决这个问题?
另外,我想知道是否可以直接从分类器本身绘制决策边界,而不需通过比较分类器在每个点的决策来绘制。
回答:
fit()
方法应该只调用一次。你调用了fit
方法两次,一次用于point1
,一次用于point2
。所以当你再次为point2
调用fit()
时,估计器会重置自己,只为point2L
进行训练,而point2L
的值为0。这就是为什么你的预测结果总是0。首先将point1
和point2
合并成一个新矩阵(标签也一样),然后在新矩阵上调用fit
方法。