几个月前,我在 GitHub 上打开了一个关于这个主题的问题。可以将相应的代码添加到 scikit-learn 的当前 master 分支。
大约一年前,用户@larsmansSemisupervisedNB在文件中添加了一个实验类。sklearn/naive_bayes.py此代码位于emnb他的分叉 scikit-learn 存储库的分支中,可以在此处访问。
基本代码位于两个文件中:
当前主分支中的文件naive_bayes.py必须替换为该emnb分支中较旧的文件。
需要对类进行编辑,LabelBinarizer这可以sklearn/preprocessing.py在 master 分支的文件中找到。整个类必须由其在@larsmansemnb分支中的定义替换。在那里,它驻留在文件中sklearn/preprocessing/__init__.py。
尽管一年来朴素贝叶斯分类器的代码没有太大变化,但还是添加了一些错误修复。naive_bayes.py因此,保留文件和类的当前版本LabelBinarizer而不是给实验版本不同的名称是有意义的。
我刚刚创建了自己的 scikit-learn 存储库分支,并将实验文件添加到当前 stable 分支之上0.13.X。这个分支被调用0.13.X-emnb并且可以在这里访问。如果您查看我最近的三个提交(1和2和3),您会看到我已更改和新创建的文件。
由于SemisupervisedNB不能与其他分类器的最新版本一起使用,我刚刚在naive_bayes.pycalled旁边添加了一个新模块semisupervised_naive_bayes.py。在那里,您可以在重命名的版本中找到旧版本的分类器,例如SemiMultinomialNB,MultinomialNB这样它们就不会与最新版本的分类器发生冲突。同样,我在SemisupervisedLabelBinarizer旁边添加了一个类LabelBinarizer(名称的选择有点不幸,但至少很清楚它应该用于什么)。
因此,如果您想使用分类器的半监督版本,请使用模块sklearn.semisupervised_naive_bayes。对于当前版本,请使用模块sklearn.naive_bayes。
但请记住,这是高度实验性的。这只是使旧代码正常工作的设置。我没有搜索错误。