SciKit-learn - 训练高斯朴素贝叶斯分类器

时间:2017-02-04 16:24:26

标签: python machine-learning scikit-learn

我试图绘制高斯朴素贝叶斯分类器的决策表面。我似乎在训练分类器方面遇到了一些问题。我对机器学习也很陌生。

首先,我生成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]

我做错了什么,我该如何解决?

在旁注中,我还想知道我是否可以直接从分类器本身绘制决策边界,而不是通过比较分类器在每个点的决策。

1 个答案:

答案 0 :(得分:0)

fit()方法只应调用一次。您正在调用fit方法两次,一次针对point1,一种针对point2。因此,当您再次为fit()致电point2时,估算工具会自行重置,并且只会为point2L进行训练,即0。这就是为什么您的预测始终为0的原因。 首先将point1point2合并为一个新矩阵(标签相同),然后在新矩阵上调用fit方法。