【问题标题】:Scikit-learn Multiclass Naive Bayes with probabilities for yScikit-learn 具有 y 概率的多类朴素贝叶斯
【发布时间】:2013-12-10 15:28:03
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

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

对于 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(其中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 ]

【讨论】:

  • 但是现在,使用您的新分类器,您可以为每个训练示例获得多个答案。你如何将它们结合起来?
  • 你没有理解这个概念,仍然有一个分类器,只是改变了训练数据。你不会“组合”任何东西——只是在看起来“不一致”的东西上训练 NB——但这没关系,它会正确学习。
  • 还是不明白。您的预测器将返回 4 个值。对于你感兴趣的两个例子,你如何结合它们呢?
  • 朴素贝叶斯返回每个类的概率,而不是“只是一些值”,所以通过基本的贝叶斯思维,你选择概率最大的类,所以你取这个“输出向量”的 argmax。仍然在我的示例中,我们得到 两个 值,而不是四个 - 我不知道你从哪里得到这个数字。
  • 提出的方法只是一个训练集变换,不会改变问题的维度。变换前是 R^2->{1,2} 分类问题,变换后是 R^2->{1,2} 分类问题。唯一的区别是每个训练点都已更改和复制。它仍然是 R^2->{1,2} 问题,用 NB 解决。 X 是训练点的集合,而不是一个训练点。 Y 是 N 中的一组响应,而不是 N^4 中的一个响应。
猜你喜欢
  • 2016-04-12
  • 2015-09-02
  • 2015-09-16
  • 2017-06-21
  • 2018-06-19
  • 2014-01-13
  • 2021-03-05
  • 2021-02-09
相关资源
最近更新 更多