如何修复ZeroDivisionError:计算高斯概率时将浮点数除以零

问题描述

我正在尝试计算高斯概率,但是当我通过数据运行它时,我得到ZeroDivisionError: float division by zero

代码如下:

def GaussianProbability(x,mean,std):
    exponent = math.exp(-(math.pow(x-mean,2)/(2*math.pow(std,2))))
    return (1 / (math.sqrt(2*math.pi) * std)) * exponent

和完整的错误日志:

ZeroDivisionError                         Traceback (most recent call last)
<ipython-input-22-b3fd5204c6fa> in <module>
----> 1 precisions_PDZ1,MAP,recalls_PDZ1,fp_rates_PDZ1 = CV_results(PDZ1_graphs,PDZ1_targets,'undirected')

<ipython-input-14-044940745269> in CV_results(list_graphs,list_targets,network_type,multi)
      7     for part in tqdm(range(5)):
      8 
----> 9         probabilities_0,predictions = prediction(list_graphs[part],list_targets[part],multi)
     10 
     11         if recalls == [] and fp_rates == []:

<ipython-input-12-beeed13223ea> in prediction(graph,actual_edges,multi)
     11 
     12     for i in tqdm(range(len(X_test))):
---> 13         prob = Classprobabilities(summaries,prob_class,X_test[i])
     14         if (prob[0]+prob[1])==0:
     15             # both probabilities are too low

<ipython-input-11-286b09a753e9> in Classprobabilities(summaries,x)
      8         for i in range(len(classSummaries)):  # for every attribute
      9             mean,std = classSummaries[i]
---> 10             probabilities[classValue] *= GaussianProbability(x[i],std)
     11 
     12     return probabilities

<ipython-input-10-4a13cc5a69b2> in GaussianProbability(x,std)
      1 def GaussianProbability(x,std):
----> 2     exponent = math.exp(-(math.pow(x-mean,2))))
      3     return (1 / (math.sqrt(2*math.pi) * std)) * exponent

ZeroDivisionError: float division by zero

解决方法

唯一可能发生这种错误的地方是(2*math.pow(std,2)) == 0。 这意味着对于某些数据,std == 0会在所有样本都具有完全相同的值时发生。

您需要处理这种情况!

除非您希望自己实施(不推荐),否则可以使用scipy软件包:

import scipy
scipy.stats.norm(0,1).pdf(0)

访问scipy docs

您还可以使用python提供的内置统计信息包(更好,更简单的计算思路)。签出here

,

当standerdv等于零时,您的函数需要有一个 ID. vector1 vector2 scalar 11.0 [0.34,0.56,0.99] [0.24,0.44] 9.0 23.0 [0.12,0.66,0.21] [0.21,0.24] 4.0 语句

您可以看到此参考书可能会What is the normal distribution when standard deviation is zero?