Scikit-learn具有y概率的多类朴素贝叶斯

时间:2013-11-25 18:55:23

标签: machine-learning scikit-learn document-classification

我正在进行推文分类,其中每条推文都属于少数类之一。 训练集输出作为将样本归属于每个类的概率给出。 例如:推文#1:C1-0.6,C2-0.4,C3-0.0(C1,C2,C3为班级)

我计划使用Scikit-learn使用朴素贝叶斯分类器。我找不到naive_bayes.py中的拟合方法,该方法需要每个课程进行训练的概率。 我需要一个分类器,它接受训练集的每个类的输出概率。 (即:y.shape = [n_samples,n_classes])

如何处理我的数据集以应用NaiveBayes分类器?

1 个答案:

答案 0 :(得分:3)

这并不容易,因为“班级概率”可以有很多解释。

在NB分类器和sklearn的情况下,我看到的最简单的过程是:

  1. 根据以下规则拆分(复制)您的训练样本: 给定(x,[p1,p2,...,pk])样本(其中pi是第i类的概率)创建人工训练样本: (x,1,p1),(x,2,p2),...,(x,k,pk)。所以你得到k个新观察结果,每个观察结果“附加”到一个类别,而pi被视为样本权重,NB(在sklearn中)接受。
  2. 使用fit(X,Y,sample_weights)训练你的NB(其中Xx观察的矩阵,Y是上一步的类矩阵,{{1} }是上一步的pi矩阵。
  3. 例如,如果您的训练集包含两点:

    • ([0 1],[0.6 0.4])
    • ([1 3],[0.1 0.9])

    您将它们转换为:

    • ([0 1],1,0.6)
    • ([0 1],2,0.4)
    • ([1 3],1,0.1)
    • ([1 3],2,0.9)

    并用

    训练NB
    • sample_weights
    • X = [ [0 1], [0 1], [1 3], [1 3] ]
    • Y = [ 1, 2, 1, 2 ]