RuntimeWarning: divide by zero encountered in log错误解决
问题描述
最近在学习《机器学习实战》这本书时,朴素贝叶斯那里遇到了这样的问题。
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错误解决相关推荐
- 成功解决RuntimeWarning: divide by zero encountered in double_scalars
成功解决RuntimeWarning: divide by zero encountered in double_scalars 目录 解决问题 解决思路 解决方法 解决问题 RuntimeWarni ...
- hadoop的journalnode节点出现Can‘t scan a pre-transactional edit log错误解决办法
今天值班由于hdfs的日志满了导致磁盘爆了100%,zk和journal都挂了删日志文件的时候,不知道删错哪个地方了. 该目录下一直报错,这个日志文件增长很快,/home/bigdata/hadoop ...
- starting tomcat v7.0 server at localhost has encountered a problem错误解法方法
** starting tomcat v7.0 server at localhost has encountered a problem错误解法方法 ** 错误提示: 解决方案: 在服务器上右键 - ...
- 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日志报 ...
- Weblogic - Failed to bind remote object 错误解决方法
环境 Solaris 10 Enterprise Weblogic 9.2.1.0 一.错误解决 今天上午,QA测试一同事的应用时,在建立JDBC连接池并绑定到JNDI时出错,弄了许久,同事和QA都没 ...
- mysql 1236_Mysql主从同步Last_IO_Errno:1236错误解决方法
Mysql主从同步的Last_IO_Errno:1236错误是什么原因呢,我们要如何来解决这个问题呢?下面和小编一起来看看关于此问题的记录与解决办法. 从服务器错误代码: Last_IO_Errno: ...
- 初学laravel migrate常见错误解决
断断续续开始 laravel 入门学习,想整个简单的通讯录系统,设立了两个表,一个 branches ,一个 contacts.在创建 migration 文件的时候,没有考虑仔细,先把 contac ...
- PHP编译安装时常见错误解决办法,php编译常见错误
PHP编译安装时常见错误解决办法,php编译常见错误 1.configure: error: xslt-config not found. Please reinstall the libxslt & ...
- Oracle 数据库 Database Express Edition 11g Release 2 (11.2) 错误解决集锦(安装方面)
前言:第一次接触数据库,想下载个oracle试玩下(虽然听说一般大企业才用),到 官网下载 了个简易版 XE 版本,安装时要注意记住自己输入的数据库密码(口令) 还有安装路径不能含有空格(Do no ...
- SQL Server HA - 数据库镜像2 (Mirroring)(1418错误解决)
SQL Server2008数据库镜像的配置 (1418错误解决) 准备三台安装SQL的服务器,三台中两台担当惊喜数据库,一天当作监控服务器 在要做镜像的数据库之上右键单击,选择备份 备份类型为完整, ...
最新文章
- java 手动编译打包_Maven 手动添加第三方依赖包及编译打包和java命令行编译JAVA文件并使用jar命令打包...
- 99%的产品经理不知道的秘密:如何招程序猿喜欢?
- PostgreSQL在何处处理 sql查询之五十一
- 超微服务器电源短接启动图解_教你一招,让你的电脑启动速度秒杀别人
- css基础媒体查询和rem
- 简单高效搞定---迁移学习
- dell 虚拟linux,戴尔:Linux是轻松构建虚拟主机的关键
- 坚果pro2完美降回6.0.3卡刷包 完美恢复方法
- 贝叶斯(五)贝叶斯决策
- 百度有趣的面试智力题
- 支付宝小程序下单支付接口:40004 ACQ.INVALID_PARAMETER
- 互联网老辛整理-学员面试题
- 【续】关于对MSB/LSB写0时的步骤
- 为什么OSPF在广播网络里面,DD和LSR采用单播,而LSU hello采用组播。
- 番茄工作法总结-第二章:背景
- 论文阅读:LightGCN: Simplifying and Powering Graph Convolution Network for Recommendation
- linux中文输入法 2017,ubuntu 16.04 下安装并切换搜狗中文输入法
- 正大国际:期货交易为什么小止损大止盈还是无法获利呢?
- mt4双线macd_金叉死叉?高手教你MT4的MACD用法
- kali无法正常上网
热门文章
- 算法设计与分析课设-探寻宝藏-双线程DP问题-C语言
- jQuery 效果 - 淡入淡出,fadeIn,fadeOut,fadeToggle的使用
- Qt获取windows文档、下载、图片等目录路径
- HTML5主要针对什么进行优化,html5哪些标签可以优化SEO?
- win7性能服务器,性能大改善,微软Win10版本ca18301909即将推出,网友为何仍坚持win7?...
- 获取国家法定节假日和周末
- c语言中指数对数函数,在C语言中使用对数函数的方法
- IMO2017day1.1
- Android应用瘦身
- JavaScript 严格模式(strict mode)