向多项式朴素贝叶斯分类器添加功能 - Python

Posted

技术标签:

【中文标题】向多项式朴素贝叶斯分类器添加功能 - Python【英文标题】:Add features to Multinomial Naive Bayes classifier - Python 【发布时间】:2018-01-16 22:30:34 【问题描述】:

使用来自 Scikit learn in Python 的MultinomialNB(),我想不仅根据文档中的单词特征,而且还根据情感词典(意思是单词列表而不是 Python 数据类型)对文档进行分类。

假设这些是要训练的文档

train_data = ['i hate who you welcome for','i adore him with all my heart','i can not forget his warmest welcome for me','please forget all these things! this house smells really weird','his experience helps a lot to complete all these tedious things', 'just ok', 'nothing+special today']

train_labels = ['Nega','Posi','Posi','Nega','Posi','Other','Other']

psentidict = ['welcome','adore','helps','complete','fantastic']
nsentidict = ['hate','weird','tedious','forget','abhor']
osentidict = ['ok','nothing+special']

我可以像下面这样训练列表

from sklearn import naive_bayes
from sklearn.pipeline import Pipeline

text_clf = Pipeline([('vect', CountVectorizer()), 
                     ('clf', naive_bayes.MultinomialNB(alpha = 1.0)),]) 

text_clf = text_clf.fit(train_data, train_labels)

尽管我通过根据相应标签计算所有标记来训练数据,但我想使用我的情感字典作为额外的分类特征。

这是因为通过字典训练的特征,可以预测 OOV(超出词汇量)。只有笨拙的拉普拉斯平滑(alpha = 1.0),整体精度会受到严重限制。

test_data = 'it is fantastic'
predicted_labels = text_clf.predict(test_data)

添加字典功能后,尽管每个标记都超出了训练文档,但仍然可以预测上面的句子

如何将psentidictnsentidictosentidict 的特征添加到多项朴素贝叶斯分类器? (像文档一样训练它们会扭曲测量,所以我认为最好找到另一种方法)

【问题讨论】:

【参考方案1】:

我相信没有其他方法可以包含多项朴素贝叶斯模型的特征。这仅仅是因为您想将某种标签与特征相关联(例如,对 psentidict 中的值表示“肯定”等)。这只能通过使用所述一对特征和标签训练您的模型来实现。您可以做的是,通过创建具有所述特征的句子来改进模型,而不是直接使用单词,例如对于单词“hate”,您可以改用“I hat you with all my heart”和将情绪添加为“负面”,而不是仅使用“仇恨”对:“负面”。因此,您已经为您的数据集创建了更多这样的示例。

希望this link 有所帮助。

【讨论】:

以上是关于向多项式朴素贝叶斯分类器添加功能 - Python的主要内容,如果未能解决你的问题,请参考以下文章

机器学习:贝叶斯分类器——高斯朴素贝叶斯分类器代码实现

Hashingvectorizer 和多项式朴素贝叶斯不能一起工作

朴素贝叶斯分类器(伯努利贝叶斯+高斯贝叶斯+多项式贝叶斯)

scikit learn 使用多项式朴素贝叶斯作为三元分类器?

R中的多项朴素贝叶斯分类器

具有二进制数据的朴素贝叶斯分类器