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

Posted

技术标签:

【中文标题】SciKit-learn - 训练高斯朴素贝叶斯分类器【英文标题】:SciKit-learn - Training a Gaussian Naive Bayes Classifier 【发布时间】:2017-06-21 21:51:53 【问题描述】:

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

首先我生成 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(x,y)”切换为“partial_fit(x,y,[0,1])”即可 【参考方案1】:

fit() 方法只能调用一次。您调用了两次fit 方法,一次用于point1,一次用于point2。因此,当您再次为 point2 调用 fit() 时,估计器会自行重置并仅针对 point2L 进行训练,即 0。这就是您的预测始终为 0 的原因。 首先将point1point2 组合成一个新矩阵(标签相同),然后在新矩阵上调用fit 方法。

【讨论】:

以上是关于SciKit-learn - 训练高斯朴素贝叶斯分类器的主要内容,如果未能解决你的问题,请参考以下文章

机器学习之朴素贝叶斯(分类)

机器学习--实验三

统计学习方法朴素贝叶斯对鸢尾花(iris)数据集进行训练预测

利用sklearn进行朴素贝叶斯分类

scikit-learn学习基础知识四

实战:朴素贝叶斯对文档进行分类