用哪些算法进行单类分类?

10

我有超过15000个特定主题的文本文件。我想基于这些文件构建语言模型,以便我可以向该模型呈现各种主题的新文本文件,并使算法告诉我新文档是否属于同一主题。

我尝试了sklearn.naive_bayes.MultinomialNB, sklearn.svm.classes.LinearSVC以及其他算法,但是我遇到了以下问题:

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

我希望能够得到如何使用只有一个标签的数据来训练模型的任何指导,或者总体上如何进行。目前我所拥有的是:

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

非常感谢。

3个回答

12

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

3
OCC问题与异常检测/新颖性检测密切相关。在这些问题中,我们只有正类,它们通常不是高斯分布的。
OCC的主要动机是缺乏可用于定义其为另一类的数据集。通常,任何判别模型都可以改进这些任务的一对其他度量标准。
流行的方法基于SVM,如一类支持向量机,它通常具有非灵活的几何边界(订阅超球体),而对于不带平移不变核的灵活边界,则是支持向量数据描述(SVDD)[WIP]。
因此,一类SVM是SVDD的特殊情况,其中K(x,x)=const。
有关更多详细信息,请查看此处

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接