我从头开始实现多项朴素贝叶斯分类器以用于python中的文本分类。如何在文本分类中使用朴素贝叶斯预测想要的类
我计算每个类的特征计数和特征的概率分布。
据我实现我得到如下结果:
假设我有以下的文集:
corpus = [
{'text': 'what is chat service?', 'category': 'what_is_chat_service'},
{'text': 'Why should I use your chat service?', 'category': 'why_use_chat_service'}
]
根据朴素贝叶斯这个语料库两个类的先验概率为0.5
如果我做一些预处理,包括转换为小写,停用词删除和标点删除我得到以下的令牌列表:
- 文本1:聊天,服务]
- 文本2:使用,聊天,服务]
现在,如果我想预测类文“什么是聊天服务”后 预处理根据朴素贝叶斯规则,我们得到以下概率:
class chat service P(class|features)
what_is_chat_service 1 1 0.5
why_use_chat_service 1 1 0.5
我得到了2类的相等概率。我一直在研究改善这种情况。
一种可能的方式是包含停用词。如果我们有停止的话,我们得到以下特点概率:
class what is chat service P(class|features)
what_is_chat_service 1 1 1 1 0.5(higher)
why_use_chat_service 1e-9 1e-9 1 1 5e-19
假设与特征的违约概率= 1E-9
即其功能不属于一类
在这种如果我们对类别1有更高的概率:what_is_chat_service
在包含停用词之后仍有相同概率 如果我们语料库如下:
corpus = [
{'text': 'what is chat service?', 'category': 'what_is_chat_service'},
{'text': 'what is the benefit of using chat service?', 'category': 'why_use_chat_service'}
]
在这种情况下,对于这两个类,所有特征概率都是1。
而预测文字“什么是聊天服务?”的概率也是平等的。
但我必须得到'what_is_chat_service'类的预测。
我怎样才能得到预期的班级?我已经从sklearn尝试过朴素贝叶斯分类器。没有得到理想的结果。
如果我的问题很详细或不清楚,或者需要更多信息,请告诉我。
在此先感谢。
谢谢@Pascal。我需要一个针对从特征计数生成的朴素贝叶斯偏见问题的解决方案。当一个特征在类别1中频率较高时,包含此特征的样本将被分类到该类别中,而不管其是否进行了预先分类。 –
什么意思是“预分类” –
每个训练数据文本都被分配了一个类。在我的例子中,'what_is_chat_service'被分配给第一个文本,'why_use_chat_service'被分配给第二个文本。 –