首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >科学学习:半监督的朴素贝叶斯实现可用吗?

科学学习:半监督的朴素贝叶斯实现可用吗?
EN

Stack Overflow用户
提问于 2013-01-19 01:26:10
回答 1查看 2.8K关注 0票数 2

我想使用半监督的朴素贝叶斯(Bernoulli)的实现.根据github中的这个链接的说法,一年前有一些关于它的工作和讨论(SemisupervisedNB班)。另一方面,似乎有(半?)好像后来被另一个用户擦亮了。但是,在当前的稳定版本中,没有任何一个是可用的。

有人能给我举个例子,说明我如何使用这两种实现中的一种与当前发布的scikit-learn一起来构建一个半胱氨酸朴素Bayes吗?谢谢。

P.S.:我正在使用SklearnClassifier类从NLTK学习分类器

编辑

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-31 11:29:24

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

用户@larsman大约一年前在文件SemisupervisedNB中添加了一个实验班sklearn/naive_bayes.py。这段代码驻留在分叉的scikit-learn存储库的分支emnb中,可以访问这里

基本代码驻留在两个文件中:

  1. 必须将当前主分支中的文件naive_bayes.py替换为emnb分支中的旧文件。
  2. 对类LabelBinarizer进行编辑是必要的,这可以在主分支的文件sklearn/preprocessing.py中找到。整个类必须替换为@larsman‘emnb分支中的定义。在那里,它驻留在文件sklearn/preprocessing/__init__.py中。

尽管朴素的Bayes分类器的代码一年来没有发生很大变化,但还是添加了一些bug修复程序。因此,保留文件naive_bayes.py和类LabelBinarizer的当前版本并给实验版本取不同的名称是有意义的。

我刚刚创建了自己的scikit分支--学习存储库,并在当前稳定的分支0.13.X之上添加了实验文件。这个分支称为0.13.X-emnb,可以访问这里。如果您查看我最近提交的三个文件(123.),您会看到我更改和新创建了哪些文件。

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

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

但请记住,这是非常实验性的。这只是让这段旧代码正常工作的一个设置。我还没找过虫子。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14410193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档