RuntimeWarning: divide by zero encountered in log错误解决

这篇具有很好参考价值的文章主要介绍了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.0
    p_1_denom=0.0
    for 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 log
  p_1_vector=log(p_1_num/p_1_denom)
F:\PycharmProject\bayes_practice_1.py:75: RuntimeWarning: divide by zero encountered in log
  p_0_vector=log(p_0_num/p_0_denom)
F:\PycharmProject\bayes_practice_1.py:84: RuntimeWarning: invalid value encountered in multiply
  p_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 multiply
  p_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了。文章来源地址https://www.toymoban.com/news/detail-698671.html

[ -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错误解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • gitlab提交项目Log in with Access Token错误

    目录 报错信息 问题描述 解决方案 在提交项目到gitlab时,需要添加账户信息 ,但是报了这样一个错,原因应该就是路径问题,我在填写server地址的时候,就出现了路径问题,我把多余的几个/去掉之后,才访问到我的gitalb的指定页面。 所以我猜想下面json发送失败也是因为路

    2024年02月11日
    浏览(50)
  • 基于try-except模块的ZeroDivisionError: division by zero解决办法

    顾名思义,ZeroDivisionError: division by zero就是除数为0的情况,也可以理解为分母为0的情况。如1/0,2/0,3/0等,但有些场和我们可能需要分母位置的0值,例如我要比较分子与分母的大小,取得其中的相对小值作为一个变量,包括0。 对于上述情况,可以采用try-except异常捕获模块

    2024年02月06日
    浏览(40)
  • 【异常错误】pycharm copilot 错误:detected dubious ownership in repository ****** is owned by: 修改后无显示

    今天在github git的时候,突然出现了这种问题,下面的框出的部分一直显示: detected dubious ownership in repository at \\\'D:/Pycharm_workspace/SBDD/1/FLAG\\\' \\\'D:/Pycharm_workspace/SBDD/1/FLAG\\\' is owned by: \\\'S-1-5-32-544\\\' but the current user is: \\\'S-1-5-21-4177494839-3217565356-2102511185-500\\\' To add an exception for this directory, call

    2024年01月16日
    浏览(49)
  • SQL 中解决 “divisor is equal to zero“ 错误的方法

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 在 SQL 查询和数据处理中,当除数为零时,会触发 “divisor is equal to zero” 错误。本文将介绍如何解决这种错误,

    2024年02月12日
    浏览(29)
  • MyBatis报错 Caused by: net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: “(“ “(“

    MyBatis 使用报错 Caused by: net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: \\\"(\\\" \\\"(\\\"at line 12, column 24. 问题原因: 原因是因为mybatisplus不识别sql查询语句中的返回使用函数 MyBatis版本升级到v3.5.1以上 错误日志: ApiPostj接口测试时发生错误回显 Mapper接口(传日期格式) Mapper.xml 解

    2024年02月04日
    浏览(48)
  • 出现错误“subprocess.CalledProcessError: Command ‘[‘ninja‘, ‘-v‘]‘ returned non-zero exit status 1”解决方法

    2023.8.1更新:各个库的版本更新可能会导致这里的方法不可用,大家如果遇到这个错误,也可以尝试安装ninja,应该也能解决 这个错误的出现主要是因为pytorch版本大于1.5,可行的解决方法有两个: 1. 将pytorch版本降到1.5以下; 2. 将setup.py中的“cmdclass={\\\'build_ext\\\': BuildExtension}”这

    2024年02月13日
    浏览(34)
  • Paddle炼丹炉炸了Unexpected BUS error encountered in DataLoader worker

    Paddle训练报错,内存不足 修改配置文件config/ResNet_W18.yaml

    2024年02月05日
    浏览(39)
  • 出现ZooKeeper JMX enabled by default这种错误的解决方法

    学习以来遇到的bug/问题专栏 文章目录 系列文章专栏 前言 一 问题描述 二 解决方法 2.1 可能的原因分析 2.2 小编的问题解决方法 First:检查/etc/profile里面zookeeper的环境变量配置 Second:检查 zookeeper/conf/zoo.cfg里面的dataDir的路径 总结 本文主要介绍出现ZooKeeper JMX enabled by defaultU

    2024年02月11日
    浏览(55)
  • npm 报错“A complete log of this run can be found in:”解决方法

    npm 启动项目 npm run serve/dev的时候报了个错:再次记录一下 ! code ELIFECYCLE npm ERR! errno 1 npm ERR! new@0.1.0 serve: vue-cli-service serve npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the new@0.1.0 serve script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above. npm ERR! A complete lo

    2024年02月01日
    浏览(56)
  • 解决caused by: org.gradle.api.internal.artifacts.ivyservice错误

    报的错误如下: 可以点开下面这些小报错的总报错看一下  看到报错后面集成的sdk 说明这个sdk冲突了,可能是as版本或者gradle版本不匹配等,可以根据现在as的版本选择合适的版本,再sync now,如果这个sdk不需要了,也可以直接删掉或注释掉。 注:出现这个错误时,当as版本

    2024年02月13日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包