Scikitlearn:半监督naivebayes实现可用吗?

2024-10-01 13:35:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用Scikit的半监督naivebayes(Bernoulli)实现。据this link in github介绍,一年前就有一些关于它的工作和讨论(class semi-superviednb)。另一方面,似乎有another different implementation (function fit_semi?) which seems it was polished by another user afterwards。但是,在当前的稳定版本中没有一个可用。在

有人能给我举个例子,说明我如何在scikitlearn的当前版本中使用这两个实现中的一个来构建半监督的naivebayes?谢谢。在

注:我正在使用scikit-learn-classifier和类SklearnClassifier

编辑

我在我的项目中尝试了semiSuperviedNb的代码,将未标记类的标签从-1更改为2(我使用的是NLTK中的SKlearnClassifier,而我的未标记类得到了标签2)。但是,我得到了ValueError:当计算d(模型当前和以前参数之间的差异)时,数组不能包含infs或NaNs,因为截获数组包含inf值。。。有什么办法解决这个问题吗?在


Tags: in标记版本githubanotherlink标签数组
1条回答
网友
1楼 · 发布于 2024-10-01 13:35:46

几个月前,我打开了一个关于这个主题的issue on GitHub。可以将相应的代码添加到scikit learn的当前主分支。在

用户@larsmans在大约一年前向文件sklearn/naive_bayes.py添加了一个实验类SemisupervisedNB。此代码驻留在他的分支scikit学习库的分支emnb,可以访问here。在

基本代码保存在两个文件中:

  1. 当前主分支中的文件naive_bayes.py必须替换为emnb分支中的旧文件。

  2. 必须对类LabelBinarizer进行编辑,该编辑可以在主分支的文件sklearn/preprocessing.py中找到。整个类必须被它在@larsmans'emnb分支中的定义所取代。在那里,它位于文件sklearn/preprocessing/__init__.py

尽管naivebayes分类器的代码一年来没有太大的变化,但还是添加了一些bug修复。因此,保留文件naive_bayes.py和类LabelBinarizer的当前版本,并为实验版本提供不同的名称是有意义的。在

我刚刚创建了我自己的scikit学习库的分支,并在当前稳定分支0.13.X上添加了实验文件。这个分支叫做0.13.X-emnb,可以访问here。如果你看看我最近的三次提交(123),你就会看到我已经更改和新建了哪些文件。在

由于SemisupervisedNB不能与其他分类器的最新版本一起工作,所以我在naive_bayes.py旁边添加了一个名为semisupervised_naive_bayes.py的新模块。在这里,您可以在重命名的版本中找到较旧版本的分类器,例如SemiMultinomialNB而不是{},这样它们就不会与最新版本的分类器发生冲突。同样,我在LabelBinarizer旁边添加了一个类SemisupervisedLabelBinarizer(名称的选择有点不幸,但至少它应该用于什么目的)。在

因此,如果您想使用半监督版本的分类器,请使用模块sklearn.semisupervised_naive_bayes。对于当前版本,请使用模块sklearn.naive_bayes。在

但请记住,这是高度实验性的。这只是让旧代码工作的一个设置。我没找过虫子。在

相关问题 更多 >