哪种算法用于一个类别分类?

时间:2013-10-23 20:40:24

标签: scikit-learn text-classification

我有超过15000个特定主题的文本文档。我想建立一个基于前者的语言模型,以便我可以向该模型呈现各种主题的新随机文本文档,算法会告诉新文档是否属于同一主题。

我尝试了sklearn.naive_bayes.MultinomialNBsklearn.svm.classes.LinearSVC和其他人,但是我遇到了以下问题:

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

对于如何仅使用一个标签训练模型或如何进行一般操作,我将不胜感激。到目前为止我所拥有的是:

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

非常感谢。

3 个答案:

答案 0 :(得分:8)

您正在寻找的是OneClassSvm。有关详细信息,您可能需要查看相应的文档at this link

答案 1 :(得分:3)

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

答案 2 :(得分:1)

OCC问题与异常检测/小说检测密切相关。在这些问题中,我们只有肯定的类,并且它们通常是非高斯的。

OCC的主要动机是缺乏可用于将其定义为另一类的数据集。通常,在使用任何区分模型的情况下,针对这些任务的度量标准都会得到改善。

流行的方法基于one-class SVM之类的SVM,它们通常具有不灵活的几何边界(订阅超球),而对于灵活的方法(没有平移不变核)为support vector data description(SVDD)[ WIP]。

因此,一类SVM是SVDD的特殊情况,具有K(x,x)= const。

有关更多详细信息,请检查here.