我想用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值。。。有什么办法解决这个问题吗?在
几个月前,我打开了一个关于这个主题的issue on GitHub。可以将相应的代码添加到scikit learn的当前主分支。在
用户@larsmans在大约一年前向文件
sklearn/naive_bayes.py
添加了一个实验类SemisupervisedNB
。此代码驻留在他的分支scikit学习库的分支emnb
,可以访问here。在基本代码保存在两个文件中:
当前主分支中的文件
naive_bayes.py
必须替换为emnb
分支中的旧文件。必须对类
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。如果你看看我最近的三次提交(1和2和3),你就会看到我已经更改和新建了哪些文件。在由于},这样它们就不会与最新版本的分类器发生冲突。同样,我在
SemisupervisedNB
不能与其他分类器的最新版本一起工作,所以我在naive_bayes.py
旁边添加了一个名为semisupervised_naive_bayes.py
的新模块。在这里,您可以在重命名的版本中找到较旧版本的分类器,例如SemiMultinomialNB
而不是{LabelBinarizer
旁边添加了一个类SemisupervisedLabelBinarizer
(名称的选择有点不幸,但至少它应该用于什么目的)。在因此,如果您想使用半监督版本的分类器,请使用模块
sklearn.semisupervised_naive_bayes
。对于当前版本,请使用模块sklearn.naive_bayes
。在但请记住,这是高度实验性的。这只是让旧代码工作的一个设置。我没找过虫子。在
相关问题 更多 >
编程相关推荐