1

我正在做推文分类,其中每条推文都可以属于少数类别之一。训练集输出作为该样本属于每个类别的概率给出。例如:tweet#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 分类器?

4

1 回答 1

3

这并不容易,因为“类别概率”可以有多种解释。

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

  1. 根据以下规则拆分(复制)您的训练样本:给定 (x, [p1, p2, ..., pk ]) 样本(其中 pi 是第 i 个类的概率)创建人工训练样本: (x, 1, p1 ), (x, 2, p2), ..., (x, k, pk)。所以你得到 k 个新的观察,每个“附加”到一个类,并且 pi 被视为样本 weight,NB(在 sklearn 中)接受。
  2. 训练你的 NB fit(X,Y,sample_weights)(其中X是你的x观察矩阵,Y是上一步的类矩阵,是上一步sample_weights的 pi 矩阵。

例如,如果您的训练集包含两点:

  • ( [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

  • X = [ [0 1], [0 1], [1 3], [1 3] ]
  • Y = [ 1, 2, 1, 2 ]
  • sample_weights = [ 0.6 0.4 0.1 0.9 ]
于 2013-11-25T19:07:18.150 回答