我想使用半监督的朴素贝叶斯(Bernoulli)的实现.根据github中的这个链接的说法,一年前有一些关于它的工作和讨论(SemisupervisedNB班)。另一方面,似乎有(半?)好像后来被另一个用户擦亮了。但是,在当前的稳定版本中,没有任何一个是可用的。
有人能给我举个例子,说明我如何使用这两种实现中的一种与当前发布的scikit-learn一起来构建一个半胱氨酸朴素Bayes吗?谢谢。
P.S.:我正在使用SklearnClassifier类从NLTK学习分类器
编辑
我在我的项目中尝试了SemiSupervisedNB代码,将未标记类的标签从-1更改为2(我使用的是来自NLTK的SKlearnClassifier,而未标记的类得到标签2)。但是,我得到了ValueError:在计算d(模型当前和以前的参数之间的差异)时,数组不能包含infs或NaNs,因为拦截数组包含inf值.知道怎么解决这个问题吗?
发布于 2013-01-31 11:29:24
几个月前,我开了一个关于这个话题的关于GitHub的问题。可以将相应的代码添加到scikit-learn的当前主分支中。
用户@larsman大约一年前在文件SemisupervisedNB中添加了一个实验班sklearn/naive_bayes.py。这段代码驻留在分叉的scikit-learn存储库的分支emnb中,可以访问这里。
基本代码驻留在两个文件中:
naive_bayes.py替换为emnb分支中的旧文件。LabelBinarizer进行编辑是必要的,这可以在主分支的文件sklearn/preprocessing.py中找到。整个类必须替换为@larsman‘emnb分支中的定义。在那里,它驻留在文件sklearn/preprocessing/__init__.py中。尽管朴素的Bayes分类器的代码一年来没有发生很大变化,但还是添加了一些bug修复程序。因此,保留文件naive_bayes.py和类LabelBinarizer的当前版本并给实验版本取不同的名称是有意义的。
我刚刚创建了自己的scikit分支--学习存储库,并在当前稳定的分支0.13.X之上添加了实验文件。这个分支称为0.13.X-emnb,可以访问这里。如果您查看我最近提交的三个文件(1、2和3.),您会看到我更改和新创建了哪些文件。
由于SemisupervisedNB不与其他分类器的最新版本一起工作,所以我刚刚在naive_bayes.py旁边添加了一个名为semisupervised_naive_bayes.py的新模块。在这里,您可以在重命名版本中找到分类器的旧版本,例如SemiMultinomialNB而不是MultinomialNB,这样它们就不会与最新版本的分类器发生冲突。类似地,我在SemisupervisedLabelBinarizer旁边添加了一个类LabelBinarizer (名称的选择有点不幸,但至少它应该用于什么)。
因此,如果您想使用分类器的半自动版本,请使用模块sklearn.semisupervised_naive_bayes。对于当前版本,请使用模块sklearn.naive_bayes。
但请记住,这是非常实验性的。这只是让这段旧代码正常工作的一个设置。我还没找过虫子。
https://stackoverflow.com/questions/14410193
复制相似问题