Python 使用朴素贝叶斯训练模型
我有一个电影评论数据集,我想对它进行情绪分析 我使用逻辑回归实现了这一点。以下是我在这个过程中采取的步骤:Python 使用朴素贝叶斯训练模型,python,machine-learning,sentiment-analysis,naivebayes,Python,Machine Learning,Sentiment Analysis,Naivebayes,我有一个电影评论数据集,我想对它进行情绪分析 我使用逻辑回归实现了这一点。以下是我在这个过程中采取的步骤: 从数据集中的每一行中删除了停止词和标点符号 将数据分为训练集、验证集和测试集 从培训集中创建词汇表 添加词汇表中的每个单词作为特征。如果该单词位于当前行中,则将其TF-IDF值设置为特征值,否则将0设置为值 训练模型。在训练过程中,使用sigmoid函数计算假设,使用交叉熵损失作为代价函数。然后使用梯度下降法更新模型的权重 使用验证集优化超参数 使用测试集评估模型 现在,我需要使用朴素贝叶
我在网上搜索了很多资源,我只找到了使用sklearn with model.fit和model.predict的实现,我很难弄清楚这背后的数学原理,以及如何使用vanilla python实现它。在逻辑回归或SVM的情况下,该模型试图预测最适合数据的超平面。因此,这些模型将确定权重和偏差
朴素贝叶斯
更是一种概率方法。这完全取决于你
words
,如果是文本),请使用拉普拉斯平滑
α
称为平滑因子。这将是NB中的超参数
log
实现数值稳定性
- 测试示例:
这部电影很棒
- 删除停止词后:
movie great
- 从训练数据中,我们已经知道
和电影
这两个词在很棒
和+ve
类中的prob值。请参阅-ve
步骤2
类的+ve
概率将大于great
类的-ve
概率。对于单词great
,prob值可能几乎相同。(这在很大程度上取决于你的训练数据。这里我只是做一个假设)电影
movie
/+ve)*p(great
/+ve)
负类概率=p(movie
/-ve)*p(great
/-ve)
- 比较类prob值并返回具有高prob值的值
log
可以解决此问题
如果单词great
不在训练集中,则类prob值将为0。因此,使用平滑因子-α(拉普拉斯平滑)
参考更详细的信息可能是一个更好的问题,或者因为它与基础数学和理论相关,您没有必要分享。也就是说,虽然您希望从头开始编写代码,但这是基础数学的一个很好的起点,包括方程、分类算法的描述和到纸张的链接。传统上,您也可以转到和,在标题附近的右上角,您可以单击指向的链接,查看他们是如何在
.fit
方法中实现它的(GaussianNB linked用于示例)@G.Anderson感谢您的回复。我对朴素贝叶斯还不熟悉,我只需要知道我需要用朴素贝叶斯计算分类的权重和偏差,还是我只需要比较句子的两个条件概率是正的还是负的,然后选择其中最高的作为预测类?