向多项式朴素贝叶斯分类器添加功能 - 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)
添加字典功能后,尽管每个标记都超出了训练文档,但仍然可以预测上面的句子。
如何将psentidict
、nsentidict
和osentidict
的特征添加到多项朴素贝叶斯分类器? (像文档一样训练它们会扭曲测量,所以我认为最好找到另一种方法)
【问题讨论】:
【参考方案1】:我相信没有其他方法可以包含多项朴素贝叶斯模型的特征。这仅仅是因为您想将某种标签与特征相关联(例如,对 psentidict 中的值表示“肯定”等)。这只能通过使用所述一对特征和标签训练您的模型来实现。您可以做的是,通过创建具有所述特征的句子来改进模型,而不是直接使用单词,例如对于单词“hate”,您可以改用“I hat you with all my heart”和将情绪添加为“负面”,而不是仅使用“仇恨”对:“负面”。因此,您已经为您的数据集创建了更多这样的示例。
希望this link 有所帮助。
【讨论】:
以上是关于向多项式朴素贝叶斯分类器添加功能 - Python的主要内容,如果未能解决你的问题,请参考以下文章
Hashingvectorizer 和多项式朴素贝叶斯不能一起工作