首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从gaussian_kde检索值

从gaussian_kde检索值
EN

Stack Overflow用户
提问于 2021-04-01 10:57:14
回答 1查看 1.6K关注 0票数 1

这是我第一次使用Scipy,因为我找不到许多库可以直接生成KDE数据,而不像Pandas那样预先绘制(data.plot=‘kde’)。我试图将KDE中的数据作为一个列表或数组来获取,但它指的是0x000002C4A8D077F0>上的KDE对象

是否有一个np.array(密度) (Numpy)或density.values (Pandas)类似的函数可以检索这些值?

代码语言:javascript
运行
复制
import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as stats

data = [992.9832, 846.1371, 994.2491, ..., 0.0]

# generate histogram data
h, e = np.histogram(data, bins='auto')
width = 1 * (e[1] - e[0])
center = (e[:-1] + e[1:]) / 2
print(np.array(data).mean())
x = np.linspace(e.min(), e.max())

# plot the histogram
plt.figure(figsize=(8,6))
plt.bar(center, h, align='center', width=width, label='histogram')
plt.axvline(np.array(data).mean(), color='k', linestyle='dashed', linewidth=1)
plt.legend()
plt.show()

# Plot KDE
density = stats.gaussian_kde(data)
print('DENSITY TYPE:', type(density))
print('DENSITY:', density)
plt.plot(center, density(center))

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-01 13:40:45

你估计过密度

代码语言:javascript
运行
复制
kde = stats.gaussian_kde(data)

您需要在数据范围内评估密度(或者更宽的范围,您可以选择)

代码语言:javascript
运行
复制
evaluated = kde.evaluate(np.linspace(data.min(), data.max(), 100))

让我们试一下

代码语言:javascript
运行
复制
# generate random variates
np.random.seed(42)
data = sps.norm(loc=200, scale=5).rvs(100)
plt.hist(data, density=True);

现在让我们估算和评估密度

代码语言:javascript
运行
复制
density = gaussian_kde(data)
data_space = np.linspace(data.min(), data.max())
evaluated = density.evaluate(data_space)
plt.hist(data, density=True)
plt.plot(data_space, evaluated);

并且在您选择的范围内有一个密度数组(本例中为data_space,但您可以定义所需的行空间)。

代码语言:javascript
运行
复制
print(evaluated)
[0.00371907 0.00455801 0.00561179 0.00693696 0.0085618  0.01047394
 0.01262245 0.01493411 0.01733577 0.01977291 0.02221777 0.02466837
 0.0271459  0.02969787 0.03240771 0.03540247 0.03884495 0.04290023
 0.04767829 0.05316985 0.05920179 0.06543718 0.07142939 0.07671788
 0.08093304 0.08387167 0.08551486 0.08598526 0.08546673 0.08412519
 0.0820653  0.07933652 0.07597516 0.07205101 0.06768935 0.06305743
 0.05832807 0.05364531 0.04911138 0.04479586 0.04075165 0.03701897
 0.03361161 0.03049646 0.02758628 0.02475911 0.02190045 0.01894903
 0.01592369 0.01291898]

备注

被评估的PDF没有标准化,也就是说它不等于1

代码语言:javascript
运行
复制
evaluated.sum()
2.147314809573033

如果您需要将其规范化,您可以简单地将它除以和(等于除以连续变量的积分)。

代码语言:javascript
运行
复制
evaluated /= evaluated.sum()
evaluated.sum()
1.0
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66903255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档