问题描述

最近在学习《机器学习实战》这本书时,朴素贝叶斯那里遇到了这样的问题。

def train_native_bayes(train_matrix,train_category):num_train_docs=len(train_matrix)num_words=len(train_matrix[0])p=sum(train_category)/float(num_train_docs)p_0_num=zeros(num_words)p_1_num=zeros(num_words)p_0_denom=0.0p_1_denom=0.0for i in range(num_train_docs):if train_category[i]==1:p_1_num+=train_matrix[i]p_1_denom+=sum(train_matrix[i])else:p_0_num+=train_matrix[i]p_0_denom+=sum(train_matrix[i])p_1_vector=log(p_1_num/p_1_denom)p_0_vector=log(p_0_num/p_0_denom)return p_0_vector,p_1_vector,p

然后运行时出现了下面的问题:

F:\PycharmProject\bayes_practice_1.py:74: RuntimeWarning: divide by zero encountered in logp_1_vector=log(p_1_num/p_1_denom)
F:\PycharmProject\bayes_practice_1.py:75: RuntimeWarning: divide by zero encountered in logp_0_vector=log(p_0_num/p_0_denom)
F:\PycharmProject\bayes_practice_1.py:84: RuntimeWarning: invalid value encountered in multiplyp_1 = sum(need_to_classify_vector * p_1_vector) + log(p_class)    #element-wise mult
F:\PycharmProject\bayes_practice_1.py:85: RuntimeWarning: invalid value encountered in multiplyp_0 = sum(need_to_classify_vector * p_0_vector) + log(1.0 - p_class)

虽然不影响最终的结果,但是警告看起来让人不舒服。
我们排查原因,是存在数字太小的原因,溢出,计算过程中出现-inf,再做其他运算,结果还是-inf。
比如我们展示一下结果:

train_mat=[]
for i in dataset:train_mat.append(set_of_words_vector(my_vacab_set,i))
p_0_vector,p_1_vector,p=train_native_bayes(train_mat,class_vector)
print(p_0_vector)

结果如下:

[-3.17805383 -3.17805383 -3.17805383        -inf -3.17805383 -2.48490665-3.17805383 -3.17805383        -inf -3.17805383 -3.17805383 -3.17805383-inf        -inf        -inf        -inf -3.17805383        -inf-3.17805383 -3.17805383        -inf        -inf -3.17805383 -2.07944154-3.17805383 -3.17805383        -inf -3.17805383 -3.17805383        -inf-3.17805383 -3.17805383]

探索原因

当概率很小时,取对数后结果趋于负无穷大。

解决方法

我们改变浮点数的精度为1e-5

p_1_vector=log(p_1_num/p_1_denom+1e-5)
p_0_vector=log(p_0_num/p_0_denom+1e-5)

这样就不会再报错,结果也没有-inf了。

[ -3.17781386  -3.17781386  -3.17781386  -3.17781386  -3.17781386-3.17781386  -3.17781386  -3.17781386  -2.07936154  -3.17781386-11.51292546  -3.17781386 -11.51292546 -11.51292546  -3.17781386-3.17781386 -11.51292546  -3.17781386  -3.17781386 -11.51292546-11.51292546 -11.51292546 -11.51292546 -11.51292546  -3.17781386-3.17781386 -11.51292546  -2.48478666  -3.17781386  -3.17781386-11.51292546  -3.17781386]

RuntimeWarning: divide by zero encountered in log错误解决相关推荐

  1. 成功解决RuntimeWarning: divide by zero encountered in double_scalars

    成功解决RuntimeWarning: divide by zero encountered in double_scalars 目录 解决问题 解决思路 解决方法 解决问题 RuntimeWarni ...

  2. hadoop的journalnode节点出现Can‘t scan a pre-transactional edit log错误解决办法

    今天值班由于hdfs的日志满了导致磁盘爆了100%,zk和journal都挂了删日志文件的时候,不知道删错哪个地方了. 该目录下一直报错,这个日志文件增长很快,/home/bigdata/hadoop ...

  3. starting tomcat v7.0 server at localhost has encountered a problem错误解法方法

    ** starting tomcat v7.0 server at localhost has encountered a problem错误解法方法 ** 错误提示: 解决方案: 在服务器上右键 - ...

  4. linux signal历史log,nginx错误signal process started错误error.log日志显示signal process started错误解决方法...

    nginx日志报的错:ngnix:[notice] 30499#0: signal process started 前台页面显示:500 Internal Server Error,在nginx日志报 ...

  5. Weblogic - Failed to bind remote object 错误解决方法

    环境 Solaris 10 Enterprise Weblogic 9.2.1.0 一.错误解决 今天上午,QA测试一同事的应用时,在建立JDBC连接池并绑定到JNDI时出错,弄了许久,同事和QA都没 ...

  6. mysql 1236_Mysql主从同步Last_IO_Errno:1236错误解决方法

    Mysql主从同步的Last_IO_Errno:1236错误是什么原因呢,我们要如何来解决这个问题呢?下面和小编一起来看看关于此问题的记录与解决办法. 从服务器错误代码: Last_IO_Errno: ...

  7. 初学laravel migrate常见错误解决

    断断续续开始 laravel 入门学习,想整个简单的通讯录系统,设立了两个表,一个 branches ,一个 contacts.在创建 migration 文件的时候,没有考虑仔细,先把 contac ...

  8. PHP编译安装时常见错误解决办法,php编译常见错误

    PHP编译安装时常见错误解决办法,php编译常见错误 1.configure: error: xslt-config not found. Please reinstall the libxslt & ...

  9. Oracle 数据库 Database Express Edition 11g Release 2 (11.2) 错误解决集锦(安装方面)

    前言:第一次接触数据库,想下载个oracle试玩下(虽然听说一般大企业才用),到 官网下载 了个简易版 XE 版本,安装时要注意记住自己输入的数据库密码(口令)  还有安装路径不能含有空格(Do no ...

  10. SQL Server HA - 数据库镜像2 (Mirroring)(1418错误解决)

    SQL Server2008数据库镜像的配置 (1418错误解决) 准备三台安装SQL的服务器,三台中两台担当惊喜数据库,一天当作监控服务器 在要做镜像的数据库之上右键单击,选择备份 备份类型为完整, ...

最新文章

  1. java 手动编译打包_Maven 手动添加第三方依赖包及编译打包和java命令行编译JAVA文件并使用jar命令打包...
  2. 99%的产品经理不知道的秘密:如何招程序猿喜欢?
  3. PostgreSQL在何处处理 sql查询之五十一
  4. 超微服务器电源短接启动图解_教你一招,让你的电脑启动速度秒杀别人
  5. css基础媒体查询和rem
  6. 简单高效搞定---迁移学习
  7. dell 虚拟linux,戴尔:Linux是轻松构建虚拟主机的关键
  8. 坚果pro2完美降回6.0.3卡刷包 完美恢复方法
  9. 贝叶斯(五)贝叶斯决策
  10. 百度有趣的面试智力题
  11. 支付宝小程序下单支付接口:40004 ACQ.INVALID_PARAMETER
  12. 互联网老辛整理-学员面试题
  13. 【续】关于对MSB/LSB写0时的步骤
  14. 为什么OSPF在广播网络里面,DD和LSR采用单播,而LSU hello采用组播。
  15. 番茄工作法总结-第二章:背景
  16. 论文阅读:LightGCN: Simplifying and Powering Graph Convolution Network for Recommendation
  17. linux中文输入法 2017,ubuntu 16.04 下安装并切换搜狗中文输入法
  18. 正大国际:期货交易为什么小止损大止盈还是无法获利呢?
  19. mt4双线macd_金叉死叉?高手教你MT4的MACD用法
  20. kali无法正常上网

热门文章

  1. 算法设计与分析课设-探寻宝藏-双线程DP问题-C语言
  2. jQuery 效果 - 淡入淡出,fadeIn,fadeOut,fadeToggle的使用
  3. Qt获取windows文档、下载、图片等目录路径
  4. HTML5主要针对什么进行优化,html5哪些标签可以优化SEO?
  5. win7性能服务器,性能大改善,微软Win10版本ca18301909即将推出,网友为何仍坚持win7?...
  6. 获取国家法定节假日和周末
  7. c语言中指数对数函数,在C语言中使用对数函数的方法
  8. IMO2017day1.1
  9. Android应用瘦身
  10. JavaScript 严格模式(strict mode)