繁体   English   中英

如何在 Python 中计算 PDF(概率密度函数)?

[英]How do I calculate PDF (probability density function) in Python?

我在下面有以下代码,用于打印特定平均值和标准偏差的 PDF 图表。

http://imgur.com/a/oVgML

现在我需要找到特定值的实际概率。 例如,如果我的均值是 0,我的值是 0,我的概率是 1。这通常是通过计算曲线下的面积来完成的。 与此类似:

http://homepage.divms.uiowa.edu/~mbognar/applet/normal.html

我不知道如何解决这个问题

import numpy as np
import matplotlib    
import matplotlib.pyplot as plt

def normal(power, mean, std, val):
    a = 1/(np.sqrt(2*np.pi)*std)
    diff = np.abs(np.power(val-mean, power))
    b = np.exp(-(diff)/(2*std*std))
    return a*b

pdf_array = []
array = np.arange(-2,2,0.1)
print array
for i in array:
    print i
    pdf = normal(2, 0, 0.1, i)
    print pdf
    pdf_array.append(pdf)

plt.plot(array, pdf_array)
plt.ylabel('some numbers')
plt.axis([-2, 2, 0, 5])
plt.show()

print 

除非你有理由自己实现这一点。 所有这些功能都在scipy.stats.norm中可用

我认为您要求cdf ,然后使用以下代码:

from scipy.stats import norm
print(norm.cdf(x, mean, std))

如果你想从头开始写:

class PDF():
    def __init__(self,mu=0, sigma=1):
        self.mean = mu
        self.stdev = sigma
        self.data = []

    def calculate_mean(self):
        self.mean = sum(self.data) // len(self.data)
        return self.mean

    def calculate_stdev(self,sample=True):
        if sample:
            n = len(self.data)-1
        else:
            n = len(self.data)
        mean = self.mean
        sigma = 0
        for el in self.data:
            sigma += (el - mean)**2
        sigma = math.sqrt(sigma / n)
        self.stdev = sigma
        return self.stdev

    def pdf(self, x):
        return (1.0 / (self.stdev * math.sqrt(2*math.pi))) * math.exp(-0.5*((x - self.mean) / self.stdev) ** 2)



x = ax = b的曲线y = f(x)下的面积与f(x)dxx = ax = b的积分相同。 Scipy有一个快速简单的方法来做积分。 就像你理解的那样,在那个区域找到一个点的概率不可能是 1,因为这个想法是曲线下的总面积是 1(除非它可能是一个 delta 函数)。 因此0 ≤ probability of value < 1对于任何感兴趣的特定值,您应该得到0 ≤ probability of value < 1 可能有不同的方法,但传统的方法是像这样沿 x 轴分配置信区间。 在继续编码之前,我会阅读高斯曲线和归一化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM