【问题标题】:Training a model when using Naive Bayes使用朴素贝叶斯训练模型
【发布时间】:2020-06-28 15:46:19
【问题描述】:

我有一个电影评论数据集,我想对其进行情感分析。

我已经使用逻辑回归实现了这一点。以下是我在此过程中采取的步骤:

  1. 从数据集中的每一行中删除了停用词和标点符号。
  2. 将数据拆分为训练集、验证集和测试集。
  3. 从训练集中创建了一个词汇表。
  4. 将词汇表中的每个单词都添加为一项功能。如果该词在当前行,则将其 TF-IDF 值设置为特征值,否则将值设置为 0。
  5. 训练模型。在训练过程中,sigmoid 函数用于计算假设,交叉熵损失用于成本函数。然后使用梯度下降,更新模型的权重。
  6. 使用验证集调整超参数
  7. 使用测试集评估模型

现在,我需要使用朴素贝叶斯来实现同样的事情,我对如何解决这个问题感到困惑。我假设前 4 个步骤将是相同的。但是使用朴素贝叶斯的训练步骤是什么?在这种情况下,损失函数和成本函数是什么?我在哪里使用贝叶斯定理来计算条件概率?以及如何更新权重和偏差?

我在网上搜索了很多资源,但我大多只找到了使用带有 model.fit 和 model.predict 的 sklearn 的实现,我很难弄清楚这背后的数学原理以及它是如何实现的使用 vanilla python 实现。

【问题讨论】:

  • 对于Cross ValidatedData Science 可能是一个更好的问题,因为它与基础数学和理论有关,而您没有minimal reproducible example 可以分享。话虽如此,尽管您想从头开始编写代码,但 sklearn docs 是一个很好的基础数学起点,包括方程式、分类算法的描述和论文链接
  • 另外,你也可以去page for each NP classifier type,在标题附近的右上角,你可以点击source code的链接,看看究竟他们是如何在.fit 方法中实现它的(GaussianNB 以示例为目的链接)
  • @G.Anderson 感谢您的回复。我是朴素贝叶斯的新手,我只需要知道我是否需要计算使用朴素贝叶斯分类的权重和偏差,或者我只需要比较一个句子的两个条件概率是正面还是负面,然后选择最高的作为预测类?

标签: python machine-learning sentiment-analysis naivebayes


【解决方案1】:

在逻辑回归或 SVM 的情况下,模型试图预测最适合数据的超平面。所以这些模型将决定weights and biases

  1. Naive Bayes 也是一种概率方法。这完全取决于Bayes' theorem

  2. NB 中会有NO 权重和偏差,每个特征只有CLASS WISE 概率值(即,words 在文本的情况下)。

  3. 为避免零概率或处理看不见数据的情况(words 在文本情况下),请使用拉普拉斯平滑法。

  4. α 称为平滑因子。这将是 NB 中的超参数

  5. 使用log 来保证数值稳定性。


  • 测试示例:This movie is great

  • 删除停用词后:movie great

  • 从训练数据中,我们已经知道 moviegreat 两个词对于 +ve-ve 类的概率值。参考STEP 2

  • +ve 类的great 概率将大于-ve 类的great 概率。对于movie 这个词,概率值可能几乎相同。 (这在很大程度上取决于您的训练数据。这里我只是做一个假设)

正类概率 = P(movie/+ve) * P(great/+ve)

负类概率 = P(movie/-ve) * P(great/-ve)

  • 比较类概率值并返回具有高概率值的类。

附言

如果句子中的单词数量很大,那么类值会变得非常非常小。使用log 可以解决这个问题。

如果训练集中没有单词great,则类概率值为0。所以使用smoothening factor-α(拉普拉斯平滑)

更多详细信息请参考sk-learn naive bayes

【讨论】:

    猜你喜欢
    • 2019-04-07
    • 1970-01-01
    • 2014-02-21
    • 2015-06-25
    • 2013-09-09
    • 2014-12-21
    • 2020-09-13
    • 2015-10-28
    相关资源
    最近更新 更多