这篇文章除了给出HanLPv1.7.6的对数概率转概率的计算过程,同时给出sklearn中的转概率计算过程。

计算文本属于China和不属于China的概率
P(c=China| Chinese Chinese Chinese Tokyo Japn)=
P(c=China)*P(Chinese|c=China)*P(Chinese|c=China)*
P(Chinese|c=China)*P(Tokyo|c=China)*P(Japan|c=China)
=0.75*0.429*0.429*0.429*0.071*0.071=0.000299P(c!=China| Chinese Chinese Chinese Tokyo Japn)=
P(c!=China)*P(Chinese|c!=China)*P(Chinese|c!=China)*
P(Chinese|c!=China)*P(Tokyo|c!=China)*P(Japan|c!=China)
=0.25*0.222*0.222*0.222*0.222*0.222=0.000135

我们用sklearn计算得到的概率为[0.68894009, 0.31105991],实际上sklearn就是对概率值做了归一化操作,也就是先对[0.000299, 0.000135]求总和,之后再用[0.000299, 0.000135]除以总和。

我们计算一下,看看怎么从[0.000299, 0.000135]得到[0.68894009, 0.31105991],这里为了防止溢出,我们也是先对概率[0.000299, 0.000135]取对数。

In [1]: import numpy as np
In [2]: log_prob = np.array([np.log(0.000299), np.log(0.000135)])
In [3]: prob = np.exp(log_prob)/np.sum(np.exp(log_prob))
In [4]: prob
Out[4]: array([ 0.68894009,  0.31105991])

显然,对数概率p(y_k|x)的转换公式为:

以上为sklearn中对数概率转为概率的计算公式,接下来我们看看 HanLP中的转换公式。

由于概率值相乘会造成溢出,因此HanLP在计算一篇文本属于某个类目的概率时,对预测概率公式两端取对数,这样就将概率值相乘变成取对数后的概率值相加,用朴素贝叶斯预测类目的公式如下:

如果用户要求输出概率值而不是对数概率值,则对上边等式的两边做指数运算,于是

为了防止指数运算溢出,HanLP首先求对数概率最大值,然后将每个对数概率值都减掉最大值,之后再进行指数运算,

最后做归一化操作:

综上,HanLP与sklearn计算的唯一区别就是在指数运算之前减掉了max。

HanLP中实现上述计算的代码在com/hankcs/hanlp/utility/MathUtility.java类中的normalizeExp方法

/**
* 使用log-sum-exp技巧来归一化一组对数值
*
* @param predictionScores
*/
public static void normalizeExp(Map<String, Double> predictionScores)
{Set<Map.Entry<String, Double>> entrySet = predictionScores.entrySet();double max = Double.NEGATIVE_INFINITY;for (Map.Entry<String, Double> entry : entrySet){max = Math.max(max, entry.getValue());}double sum = 0.0;//通过减去最大值防止浮点数溢出for (Map.Entry<String, Double> entry : entrySet){Double value = Math.exp(entry.getValue() - max);entry.setValue(value);sum += value;}if (sum != 0.0){for (Map.Entry<String, Double> entry : entrySet){predictionScores.put(entry.getKey(), entry.getValue() / sum);}}
}

矩阵的对数运算公式_HanLP-对数概率转概率相关推荐

  1. Python中的方根运算及对数运算公式

    Python中的方根运算及对数运算公式 在Python中,我们可以使用math模块来进行方根及对数运算.下面是一些常用的代码示例: 计算平方根 使用math.sqrt(x)函数可以计算一个数的平方根. ...

  2. 矩阵的对数运算公式_必修一——对数与对数运算

    一.前言(废话) 高中数学我们已经学习了二次函数,指数函数(如果不记得的读者可以往前面翻看一下),这次作者为读者们讲解的是对数与对数运算,对数是什么呢?读者们心里有自己的认知吗? 二.对数 对数函数是 ...

  3. 矩阵的对数运算公式_2021高考总复习数学对数与对数函数

    最新考纲 1.理解对数的概念及其运算性质,知道用换底公式将一般对数转化成自然对数或常用对数:了解对数在简化运算中的作用:2.理解对数函数的概念及其单调性,掌握对数函数图象通过的特殊点,会画底数为2,1 ...

  4. 矩阵的对数运算公式_J.1 对数与分贝(DB)与放大倍数

    要理解分贝(DB)的概念,首先要理解对数. 分贝实际上是用对数来表示放大倍数,因为放大倍数现在100倍已经司空见惯,百万倍.千万倍都用得着,所以后面带0太多,放大倍数用了个换算,以10倍为基准,放大了 ...

  5. 人工智能数学基础2:指数、方根及对数运算公式

    ☞ ░ 点此跳转到老猿Python博文目录░ 一.指数公式 二.方根运算 在a.b大于0的情况下: 三.对数运算 2.1.对数的定义 2.2.对数运算 由上面的第一个公式可以得知: 2.3.常用对数 ...

  6. lg相乘公式,lg指数函数运算法则,指数函数运算公式8个

    内容导航: Q1:对数函数的运算公式. 1.a^log(a)(b)=b 2.log(a)(a)=1 3.log(a)(MN)=log(a)(M)+log(a)(N); 4.log(a)(M÷N)=lo ...

  7. 两边同时取对数求复合函数_高中数学:对数运算三难点

    对数函数是重要的函数,自然也是高考的知识点,学习对数函数常会遇到一些难点,使解题思维陷入困境,归纳起来主要有三个方面. 难点1 底数不统一 对数的运算性质是建立在底数相同的基础上的,但实际问题中,却经 ...

  8. 对数 java_Java对数函数及Java对数运算

    Java对数函数的计算方法非常有问题,然而在API中却有惊人的误差.但是假如运用了以下的方法,用Java处理数字所碰到的小麻烦就可以轻而易举的解决了. Sun的J2SE提供了一个单一的Java对数方法 ...

  9. lg相乘公式_对数相乘怎么算

    展开全部 两对数相乘无法利用对数的运算性质求解,因此在解决此类问题时,要根据所给的关系式认32313133353236313431303231363533e78988e69d8331333431356 ...

最新文章

  1. 读一个文件的java程序_java 读文件的几种方法(一)
  2. 小Z的房间[HEOI2015] (matrix-tree定理)
  3. 要判断一个飞鸽传书2007是不是好的
  4. jsp 通过cookie 记住用户名
  5. ie浏览器样式兼容写法_IE浏览器兼容问题-----html和css的兼容写法
  6. 大橡塑属于机器人板块吗_机器人中的启蒙教育
  7. 牛客SQL题解 - 查找employees表
  8. Silverlight4启动无法调试
  9. html设置表格列宽百 分比,WPS解决实现单页显示 高分辨率显示器百分之百比例下双页改单页方法...
  10. Windows远程桌面连接全屏切换--笔记本没有break键的办法
  11. PostgreSQL定时删除表数据
  12. Qt之表格输入内容限制方法示例
  13. 阳光下,我们是幸福的孩子
  14. TruckSim Quick Start Guide(TruckSim快速入门)
  15. BASE64Encoded() 方法报错说方法未定义
  16. Linux/C++项目结构与编译
  17. 性能优化检测Instruments-time profile的使用
  18. 什么是mmc和emmc(mmcblkxxx、sdxx的关系)
  19. 凯撒密码---最简单的加密方式之一
  20. 从模拟信号到数字信号

热门文章

  1. python-爬虫爬取豆瓣Top250电影数据
  2. vlayout使用解析
  3. 《面朝大海,春暖花开》
  4. DC/AC:单相方波全桥逆变电路设计与Matlab/Simulink仿真
  5. 一个简单的企业进销存管理系统 .
  6. 理论推导二:光流法(optic flow)
  7. 名词总结——day1
  8. 利用python中pdfplumber库提取PDF文件中文字
  9. 宽带连接要求用户名和密码是灰色的
  10. 2014艺考:北京电影学院表演系初试拾零