Python 使用朴素贝叶斯训练模型

Python 使用朴素贝叶斯训练模型,python,machine-learning,sentiment-analysis,naivebayes,Python,Machine Learning,Sentiment Analysis,Naivebayes,我有一个电影评论数据集,我想对它进行情绪分析 我使用逻辑回归实现了这一点。以下是我在这个过程中采取的步骤: 从数据集中的每一行中删除了停止词和标点符号 将数据分为训练集、验证集和测试集 从培训集中创建词汇表 添加词汇表中的每个单词作为特征。如果该单词位于当前行中,则将其TF-IDF值设置为特征值,否则将0设置为值 训练模型。在训练过程中,使用sigmoid函数计算假设,使用交叉熵损失作为代价函数。然后使用梯度下降法更新模型的权重 使用验证集优化超参数 使用测试集评估模型 现在,我需要使用朴素贝叶

我有一个电影评论数据集,我想对它进行情绪分析

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

  • 从数据集中的每一行中删除了停止词和标点符号
  • 将数据分为训练集、验证集和测试集
  • 从培训集中创建词汇表
  • 添加词汇表中的每个单词作为特征。如果该单词位于当前行中,则将其TF-IDF值设置为特征值,否则将0设置为值
  • 训练模型。在训练过程中,使用sigmoid函数计算假设,使用交叉熵损失作为代价函数。然后使用梯度下降法更新模型的权重
  • 使用验证集优化超参数
  • 使用测试集评估模型
  • 现在,我需要使用朴素贝叶斯实现同样的事情,我对如何处理这个问题感到困惑。我假设前4步是相同的。但是,当使用朴素贝叶斯时,训练步骤是什么?在这种情况下,损失函数和成本函数是什么?我在哪里使用贝叶斯定理来计算条件概率?如何更新权重和偏差


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

    在逻辑回归或SVM的情况下,该模型试图预测最适合数据的超平面。因此,这些模型将确定权重和偏差

  • 朴素贝叶斯
    更是一种概率方法。这完全取决于你

  • NB中将不存在权重和偏差,每个特征的概率值(即,文本情况下的单词概率值)

  • 为了避免零概率或处理不可见数据的情况(
    words
    ,如果是文本),请使用拉普拉斯平滑

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

  • 使用
    log
    实现数值稳定性


    • 测试示例:
      这部电影很棒

    • 删除停止词后:
      movie great

    • 从训练数据中,我们已经知道
      电影
      很棒
      这两个词在
      +ve
      -ve
      类中的prob值。请参阅
      步骤2

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

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

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

    • 比较类prob值并返回具有高prob值的值
    附言

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

    如果单词
    great
    不在训练集中,则类prob值将为0。因此,使用平滑因子-α(拉普拉斯平滑)


    参考更详细的信息

    可能是一个更好的问题,或者因为它与基础数学和理论相关,您没有必要分享。也就是说,虽然您希望从头开始编写代码,但这是基础数学的一个很好的起点,包括方程、分类算法的描述和到纸张的链接。传统上,您也可以转到和,在标题附近的右上角,您可以单击指向的链接,查看他们是如何在
    .fit
    方法中实现它的(GaussianNB linked用于示例)@G.Anderson感谢您的回复。我对朴素贝叶斯还不熟悉,我只需要知道我需要用朴素贝叶斯计算分类的权重和偏差,还是我只需要比较句子的两个条件概率是正的还是负的,然后选择其中最高的作为预测类?