HanLP-朴素贝叶斯分类预测缺陷
文章整理自 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之间的数值,这一看就是概率值。
HanLP-朴素贝叶斯分类预测缺陷的更多相关文章
- 机器学习之路: python 朴素贝叶斯分类器 MultinomialNB 预测新闻类别
使用python3 学习朴素贝叶斯分类api 设计到字符串提取特征向量 欢迎来到我的git下载源代码: https://github.com/linyi0604/MachineLearning fro ...
- 分类算法之朴素贝叶斯分类(Naive Bayesian Classification)
1.什么是分类 分类是一种重要的数据分析形式,它提取刻画重要数据类的模型.这种模型称为分类器,预测分类的(离散的,无序的)类标号.例如医生对病人进行诊断是一个典型的分类过程,医生不是一眼就看出病人得了 ...
- 用scikit-learn实现朴素贝叶斯分类器 转
原文:http://segmentfault.com/a/1190000002472791 朴素贝叶斯(Naive Bayes Classifier)是一种「天真」的算法(假定所有特征发生概率是独立的 ...
- SparkMLib分类算法之朴素贝叶斯分类
SparkMLib分类算法之朴素贝叶斯分类 (一)朴素贝叶斯分类理解 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法.简单来说,朴素贝叶斯分类器假设样本每个特征与其他特征都不相关.举个例子, ...
- javascript实现朴素贝叶斯分类与决策树ID3分类
今年毕业时的毕设是有关大数据及机器学习的题目.因为那个时间已经步入前端的行业自然选择使用JavaScript来实现其中具体的算法.虽然JavaScript不是做大数据处理的最佳语言,相比还没有优势,但 ...
- 朴素贝叶斯分类法 Naive Bayes ---R
朴素贝叶斯算法 [转载时请注明来源]:http://www.cnblogs.com/runner-ljt/ Ljt 勿忘初心 无畏未来 作为一个初学者,水平有限,欢迎交流指正. 朴素贝叶斯分类法 ...
- 机器学习---朴素贝叶斯分类器(Machine Learning Naive Bayes Classifier)
朴素贝叶斯分类器是一组简单快速的分类算法.网上已经有很多文章介绍,比如这篇写得比较好:https://blog.csdn.net/sinat_36246371/article/details/6014 ...
- 朴素贝叶斯分类器及Python实现
贝叶斯定理 贝叶斯定理是通过对观测值概率分布的主观判断(即先验概率)进行修正的定理,在概率论中具有重要地位. 先验概率分布(边缘概率)是指基于主观判断而非样本分布的概率分布,后验概率(条件概率)是根据 ...
- 利用朴素贝叶斯分类算法对搜狐新闻进行分类(python)
数据来源 https://www.sogou.com/labs/resource/cs.php介绍:来自搜狐新闻2012年6月—7月期间国内,国际,体育,社会,娱乐等18个频道的新闻数据,提供URL ...
随机推荐
- 定时器TIM,pwm
一.定时器 1. 定义 设置等待时间,到达后则执行指定操作的硬件. 2. STM32F407的定时器有以下特征 具有基本的定时功能,也有PWM输出(灯光控制.电机的转速).脉冲捕获功能( ...
- [DK] 化学竞赛的大奖
https://www.luogu.org/problemnew/show/T16502 无向图 缩点 树的直径 到直径两个端点的距离的较大值 #include <iostream> ...
- 第二章、URL与资源
1 URL统一资源定位符 URL 是浏览器寻找信息时所需的资源位置.通过 URL,人类和应用程序才能找到.使用并共享因特网上大量的数据资源.URL是作为URI的一个子集,URI是一类更通用的资源标识符 ...
- Eclipse修改为中文版
1.打开浏览器访问 https://www.eclipse.org/babel/downloads.php 复制语言包的url地址,我选择最新的 2.打开eclipse,依次选择菜单栏“Help - ...
- Java并发指南8:AQS中的公平锁与非公平锁,Condtion
一行一行源码分析清楚 AbstractQueuedSynchronizer (二) 转自https://www.javadoop.com/post/AbstractQueuedSynchronizer ...
- Tensorflow使用训练好的模型进行测试,发现计算速度越来越慢
实验时要对多个NN模型进行对比,依次加载直到第8个模型时,发现运行速度明显变慢而且电脑开始卡顿,查看内存占用90+%. 原因:使用过的NN模型还会保存在内存,继续加载一方面使新模型加载特别特别慢,另一 ...
- ArcGIS超级工具SPTOOLS-SHP转数据库,批量数据库转数据库,栅格彩色转黑白
1.1 SHP转数据库 把一个文件夹的数据,转到数据库,或者另一个文件夹,不含字文件夹 1.2 批量数据库转数据库 把一个文件夹下GDB或者MDB,转到另一个文件夹为MDB,GDB,并实现版本的转 ...
- UML期末复习题——2.5:System Sequence Diagram & Post-condition
第五题:系统顺序图 重要概念: 1.对象: 对象是特定行为与属性的集合. 对象的表示方式有三种: a.包括对象名和类名 b.只有类名. c.只有对象名 2.消息表示形式: 消息用于描述对象间交互的方式 ...
- 使用python获取微医数据
用到的包: BeautifulSoup pymysql requests json 碰到的问题: 1.医生查询分页数据不能超过38页,超过无法返回数据 2.某些字段对应的html元素包含一些无效的cl ...
- Kotlin中反射
枚举类成员 import kotlin.reflect.full.memberFunctions import kotlin.reflect.full.memberProperties fun mai ...