9

我有超过 15000 个特定主题的文本文档。我想在前者的基础上建立一个语言模型,这样我就可以向这个模型展示各种主题的新随机文本文档,并且算法会判断新文档是否属于同一主题。

我试过了sklearn.naive_bayes.MultinomialNBsklearn.svm.classes.LinearSVC还有其他的,但是我有以下问题:

这些算法需要具有多个标签或类别的训练数据,而我只有涵盖特定主题的网页。其他文档没有标记并且有许多不同的主题。

我将不胜感激有关如何训练只有一个标签的模型或一般如何进行的任何指导。到目前为止,我所拥有的是:

c = MultinomialNB()
c.fit(X_train, y_train)
c.predict(X_test)

非常感谢。

4

3 回答 3

12

您正在寻找的是OneClassSvm。有关更多信息,您可能需要查看此链接中的相应文档。

于 2013-10-24T14:23:52.600 回答
6

TextBlob模块中还有另一个分类器,称为PositiveNaiveBayesClassifier。引用他们的文档:

朴素贝叶斯分类器的一种变体,它使用部分标记的训练集执行二元分类,即当只有一个类被标记而另一个没有被标记时。假设两个标签上的先验分布,使用未标记的集合来估计特征的频率。

代码用法:

>>> from text.classifiers import PositiveNaiveBayesClassifier
>>> sports_sentences = ['The team dominated the game',
                        'They lost the ball',
                        'The game was intense',
                        'The goalkeeper catched the ball',
                        'The other team controlled the ball']
>>> various_sentences = ['The President did not comment',
                         'I lost the keys',
                         'The team won the game',
                         'Sara has two kids',
                         'The ball went off the court',
                         'They had the ball for the whole game',
                         'The show is over']
>>> classifier = PositiveNaiveBayesClassifier(positive_set=sports_sentences,
                                unlabeled_set=various_sentences)
>>> classifier.classify("My team lost the game")
True
>>> classifier.classify("And now for something completely different.")
False
于 2016-02-10T05:39:32.547 回答
2

OCC 问题与异常检测/新检测密切相关。在这些问题中,我们只有正类,它们通常是非高斯的。

OCC 的主要动机是缺乏可用于将其定义为另一个类的数据集。通常,使用任何判别模型,这些任务的一对一指标都会得到改进。

流行的方法是基于支持向量机的,例如一类支持向量机,它通常具有非灵活的几何边界(订阅超球),而灵活的一类支持向量机(没有平移不变核)是支持向量数据描述(SVDD)[WIP]。

所以一类 SVM 是 SVDD 的一种特殊情况,K(x,x)=const。

有关更多详细信息,请查看此处。

于 2019-02-01T06:04:03.977 回答