文章整理自 baiziyu 的知乎专栏,感兴趣的朋友可以去关注下这位大神的专栏,很多关于自然语言处理的文章写的很不错。昨天看到他的分享的两篇关于朴素贝叶斯分类预测的文章,整理了一下分享给给大家,文章已做部分修改!
朴素贝叶斯分类时,最好取对数变相乘为相加,防止预测结果溢出。可能出现的badcase就是明明训练语料X类目下没有词语t,而系统就将文本预测为X类目。解决方法就时改相乘为取对数相加。HanLP的朴素贝叶斯分类计算没有用对数相加的方法,而是直接用的概率相乘,很有可能溢出。
对上述内容做一些更正,HanLP的朴素贝叶斯是按照概率取对数相加做的。
看一下下边的代码
@Override
public double[] categorize(Document document) throws IllegalArgumentException, IllegalStateException
{
Integer category;
Integer feature;
Integer occurrences;
Double logprob;
double[] predictionScores = new double[model.catalog.length];
for (Map.Entry<Integer, Double> entry1 : model.logPriors.entrySet())
{
category = entry1.getKey();
logprob = entry1.getValue(); //用类目的对数似然初始化概率
//对文档中的每个特征
for (Map.Entry<Integer, int[]> entry2 : document.tfMap.entrySet())
{
feature = entry2.getKey();
if (!model.logLikelihoods.containsKey(feature))
{
continue; //如果在模型中找不到就跳过了
}
occurrences = entry2.getValue()[0]; //获取其在文档中的频次
logprob += occurrences * model.logLikelihoods.get(feature).get(category); //将对数似然乘上频次
}
predictionScores[category] = logprob;
}
if (configProbabilityEnabled) MathUtility.normalizeExp(predictionScores);
return predictionScores;
}
这么看来,之前遇到的下边的这个badcase就还要再分析
[1] 化验指标一变化患者就六神无主,看医生怎么讲解
核心词:患者 看医生
这里“患者”和“看医生”两个词都没在“艺术”类训练语料中出现,但是预测概率最大的反倒是“艺术”。
由于用PyHanLP没法看到预测概率的计算过程,所以还是把Python的分类预测代码改为Java代码调式看一下。今天移植了预处理,资源加载,人工干预部分的代码,明天把剩余预测部分移植为Java再来看这个badcase。这就是朴素贝叶斯的优势,分析起来非常清晰容易。不过从PyHanLP的预测输出概率值来看,不太像是取了对数相加得到的,因为都是0-1之间的数值,这一看就是概率值。
相关推荐
人工智能_项目实践_朴素贝叶斯分类器_朴素贝叶斯文本分类器 **数据:**搜狗文本分类语料库 **分类器:**朴素贝叶斯分类器 NBC(Naive Bayesian Classifier) **编程语言:**Python+jieba分词库+nltk+sklearn
人工智能-项目实践-朴素贝叶斯分类器-朴素贝叶斯文本分类器源码+实验报告(大作业&课设),含有代码注释,满分大作业资源,新手也可看懂,期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。...
机器学习实验报告-朴素贝叶斯学习和分类文本.docx机器学习实验报告-朴素贝叶斯学习和分类文本.docx机器学习实验报告-朴素贝叶斯学习和分类文本.docx机器学习实验报告-朴素贝叶斯学习和分类文本.docx机器学习实验报告...
朴素贝叶斯算法是基于概率理论的一种分类方法,它的核心思想是假设各个特征之间相互独立,并且每个特征对类别的影响是独立的。尽管这种假设在实际问题中可能过于简化,但在许多情况下仍然表现出良好的性能,尤其是在...
1、内容概要:本资源主要基朴素贝叶斯算法实现新闻分类,适用于初学者学习文本分类使用。 2、新闻分类源码实现过程:将数据集划分为训练集和测试集;使用jieba模块进行分词,词频统计,停用词过滤,文本特征提取,将...
《基于Matlab的朴素贝叶斯算法:鸢尾花数据集分类详解》 在机器学习领域,朴素贝叶斯算法是一种简单而有效的分类方法。它基于贝叶斯定理,并假设特征之间相互独立,因此得名“朴素”。在这个项目中,我们将深入探讨...
朴素贝叶斯分类器是一种基于贝叶斯定理的概率分类方法,它简单且易于实现,广泛应用于文本分类、垃圾邮件过滤、情感分析等众多领域。朴素贝叶斯分类器的核心是基于属性条件独立的假设,即一个属性的出现不影响其他...
项目实战-朴素贝叶斯算法实现垃圾邮件过滤源码+文档说明.zip该项目是个人大作业项目源码,评审分达到95分以上,都经过严格调试,确保可以运行!放心下载使用。 项目实战-朴素贝叶斯算法实现垃圾邮件过滤源码+文档...
项目实战-朴素贝叶斯算法实现垃圾邮件过滤源码及数据集(期末大作业).zip个人经导师指导并认可通过的高分设计项目,评审分98分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为...
项目实战-朴素贝叶斯算法实现垃圾邮件过滤源码及数据集(高分项目).zip个人经导师指导并认可通过的高分设计项目,评审分98分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程...
项目实战-朴素贝叶斯算法实现新闻分类源码及数据集(高分项目).zip个人经导师指导并认可通过的高分设计项目,评审分98分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计...
在毕设作业中,朴素贝叶斯分类可能被用于解决实际问题,例如分析用户行为、预测股票市场或进行文本情感分析等。通过构建朴素贝叶斯模型,学生可以深入理解概率论与统计学在实际问题中的应用,并掌握机器学习算法的...
1、内容概要:本资源主要基朴素贝叶斯算法实现垃圾邮件过滤分类,适用于初学者学习文本分类使用。 2、主要内容:邮件数据集email,email文件夹下有两个文件夹ham和spam,其中ham文件夹下的txt文件为正常邮件,spam...
朴素贝叶斯是一种基于概率的分类方法,它假设特征之间相互独立,并且每个特征对类别的贡献是独立的。在机器学习领域,朴素贝叶斯因其简单、高效和易于理解的特点,被广泛应用于文本分类、垃圾邮件过滤、情感分析等多...
例如,对于**文本分类**,我们可以利用`CountVectorizer`或`TfidfVectorizer`将文本数据转换为特征向量,然后使用`MultinomialNB`或者`GaussianNB`等不同的朴素贝叶斯分类器进行训练和预测。在垃圾邮件过滤的例子中...
Python3数据分析与挖掘建模实战-6-04 分类-朴素贝叶斯.mp4
人工智能-项目实践-新闻分类-朴素贝叶斯实现的文本分类(新闻分类) (文本分类)朴素贝叶斯实现的新闻分类 新闻共分7类,新闻信息在此采集: 1 财经 http://finance.qq.com/l/201108/scroll_17.htm 2 科技 ...