标签: probability-density

整合2D核密度估计

我有一个x,y点的分布,我KDE通过scipy.stats.gaussian_kde得到了.这是我的代码以及输出的外观(x,y数据可以从这里获得):

import numpy as np
from scipy import stats

# Obtain data from file.
data = np.loadtxt('data.dat', unpack=True)
m1, m2 = data[0], data[1]
xmin, xmax = min(m1), max(m1)
ymin, ymax = min(m2), max(m2)

# Perform a kernel density estimate (KDE) on the data
x, y = np.mgrid[xmin:xmax:100j, ymin:ymax:100j]
positions = np.vstack([x.ravel(), y.ravel()])
values = np.vstack([m1, m2])
kernel = stats.gaussian_kde(values)
f = np.reshape(kernel(positions).T, x.shape)

# Define the number that will determine …
Run Code Online (Sandbox Code Playgroud)

python integration kernel-density probability-density

6
推荐指数
1
解决办法
7549
查看次数

使用标准库的概率密度函数?

能够使用它std <random>来生成不同概率分布的随机数很好......现在,有没有办法使用标准库计算给定分布及其参数的一组数字的概率?

我知道我可以为我自己的任何发行版编写概率密度和质量函数(参见下面的单个随机变量示例),但如果可以,我宁愿使用标准库.

long double exponential_pdf(long double x, long double rate) {

    if ( x < 0.0 ) {
        return 0.0;
    }
    if ( rate < 0.0 ) {
        return NOT_A_NUMBER;
    }
    auto    pdf = rate * exp( - rate * x);
    return  pdf;
}
Run Code Online (Sandbox Code Playgroud)

c++ boost stl c++11 probability-density

6
推荐指数
1
解决办法
6058
查看次数

为实际数据的分布生成随机数?

我有一组真实数据,我想使用这些数据来查找概率分布,然后根据它们的pdf使用它们的属性生成一些随机点.我的数据集示例如下:

#Mag Weight
21.9786 3.6782
24.0305 6.1120
21.9544 4.2225
23.9383 5.1375
23.9352 4.6499
23.0261 5.1355
23.8682 5.9932
24.8052 4.1765
22.8976 5.1901
23.9679 4.3190
25.3362 4.1519
24.9079 4.2090
23.9851 5.1951
22.2094 5.1570
22.3452 5.6159
24.0953 6.2697
24.3901 6.9299
24.1789 4.0222
24.2648 4.4997
25.3931 3.3920
25.8406 3.9587
23.1427 6.9398
21.2985 7.7582
25.4807 3.1112
25.1935 5.0913
25.2136 4.0578
24.6990 3.9899
23.5299 4.6788
24.0880 7.0576
24.7931 5.7088
25.1860 3.4825
24.4757 5.8500
24.1398 4.9842
23.4947 4.4730
20.9806 5.2717
25.9470 3.4706
25.0324 3.3879
24.7186 3.8443
24.3350 …
Run Code Online (Sandbox Code Playgroud)

python statistics numpy scipy probability-density

6
推荐指数
1
解决办法
1184
查看次数

scipy gaussian_kde和循环数据

我正在使用scipys gaussian_kde获取某些双峰数据的概率密度。但是,由于我的数据是有角度的(以度为单位的方向),所以当值接近极限时会出现问题。下面的代码给出了两个示例kde,当域为0-360时,由于无法处理数据的循环性质,因此处于估计状态。pdf需要在单位圆上定义,但我在scipy.stats中找不到适合此类数据的任何内容(存在冯·米斯分布,但仅适用于单峰数据)。外面有没有人遇到过这个?是否有任何可用于估算单位圆上的双峰pdf的信息(基于python的首选)?

import numpy as np
import scipy as sp
from pylab import plot,figure,subplot,show,hist
from scipy import stats



baz = np.array([-92.29061004, -85.42607874, -85.42607874, -70.01689348,
               -63.43494882, -63.43494882, -70.01689348, -70.01689348,
               -59.93141718, -63.43494882, -59.93141718, -63.43494882,
               -63.43494882, -63.43494882, -57.52880771, -53.61564818,
               -57.52880771, -63.43494882, -63.43494882, -92.29061004,
               -16.92751306, -99.09027692, -99.09027692, -16.92751306,
               -99.09027692, -16.92751306,  -9.86580694,  -8.74616226,
                -9.86580694,  -8.74616226,  -8.74616226,  -2.20259816,
                -2.20259816,  -2.20259816,  -9.86580694,  -2.20259816,
                -2.48955292,  -2.48955292,  -2.48955292,  -2.48955292,
                 4.96974073,   4.96974073,   4.96974073,   4.96974073,
                -2.48955292,  -2.48955292,  -2.48955292,  -2.48955292,
                -2.48955292,  -9.86580694,  -9.86580694,  -9.86580694,
               -16.92751306, -19.29004622, -19.29004622, -26.56505118,
               -19.29004622, -19.29004622, -19.29004622, -19.29004622]) …
Run Code Online (Sandbox Code Playgroud)

gaussian scipy kernel-density probability-density

5
推荐指数
2
解决办法
1234
查看次数

在给定一系列bin概率的情况下,如何生成随机的bin计数样本?

我有一个整数需要根据概率分布分成二进制位.例如,如果我有N=100对象进入[0.02, 0.08, 0.16, 0.29, 0.45]那么你可能会得到[1, 10, 20, 25, 44].

import numpy as np
# sample distribution
d = np.array([x ** 2 for x in range(1,6)], dtype=float)
d = d / d.sum()
dcs = d.cumsum()
bins = np.zeros(d.shape)
N = 100
for roll in np.random.rand(N):
    # grab the first index that the roll satisfies
    i = np.where(roll < dcs)[0][0]  
    bins[i] += 1
Run Code Online (Sandbox Code Playgroud)

实际上,N和我的箱数非常大,因此循环并不是一个可行的选择.有什么方法可以将此操作进行矢量化以加快速度吗?

python random numpy vectorization probability-density

5
推荐指数
1
解决办法
615
查看次数

使用R通过ggplot计算重叠密度图的面积

如何获得重叠密度曲线下的面积?

我该如何解决 R 的问题?(这里有python的解决方案:计算两个函数的重叠面积

set.seed(1234)
df <- data.frame(
  sex=factor(rep(c("F", "M"), each=200)),
  weight=round(c(rnorm(200, mean=55, sd=5),
                 rnorm(200, mean=65, sd=5)))
  )
Run Code Online (Sandbox Code Playgroud)

(来源:http : //www.sthda.com/english/wiki/ggplot2-density-plot-quick-start-guide-r-software-and-data-visualization

ggplot(df, aes(x=weight, color=sex, fill=sex)) + 
 geom_density(aes(y=..density..), alpha=0.5)
Run Code Online (Sandbox Code Playgroud)

“图中使用的点由 ggplot_build() 返回,因此您可以访问它们。” 所以现在,我有了积分,我可以将它们提供给 approxfun,但我的问题是我不知道如何减去密度函数。

非常感谢任何帮助!(而且我相信需求量很大,没有现成的解决方案。)

r ggplot2 density-plot probability-density

5
推荐指数
1
解决办法
3470
查看次数

为什么这个核密度估计的值超过 1.0?

我试图通过绘制皮马印第安人糖尿病数据集的概率密度分布来分析其特征(点击链接获取数据集)。我尚未删除无效的 0 数据,因此绘图有时会在最左侧显示偏差。在大多数情况下,分布看起来很准确:

所有概率密度分布

我对 DiabetesPedigree 的图的外观有疑问,该图显示的概率超过 1.0(对于 x ~ 0.1 和 0.5 之间)。据我了解,组合概率应等于 1.0。

DiatebesPedigree 的概率密度分布

我已经隔离了 DiatebesPedigree 图的代码,但通过更改值也可以用于其他图dataset_index

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import gaussian_kde

dataset_index = 6
feature_name = "DiabetesPedigree"
filename = 'pima-indians-diabetes.data.csv'

data = pd.read_csv(filename)
feature_data = data.ix[:, dataset_index]

graph_min = feature_data.min()
graph_max = feature_data.max()

density = gaussian_kde(feature_data)
density.covariance_factor = lambda : .25
density._compute_covariance()

xs = np.arange(graph_min, graph_max, (graph_max - graph_min)/200)
ys = density(xs)

plt.xlim(graph_min, graph_max) …
Run Code Online (Sandbox Code Playgroud)

python machine-learning matplotlib probability-density

5
推荐指数
1
解决办法
5726
查看次数

如何生成随机"足够"的随机整数?

我正在尝试解决Project Euler中的第280个问题,为此我编写了以下模拟;

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>

/* Directions

    1
2       3
    4
*/

int grid[5][5] = {
    {0, 0, 0, 0, 2},
    {0, 0, 0, 0, 2},
    {0, 0, 0, 0, 2},
    {0, 0, 0, 0, 2},
    {0, 0, 0, 0, 2}
};

int InitPos[2] = {2, 2};

int MaxExp = 5000000;

bool Success = false;
int StepCount = 0;
int ExpNumber = 1;
int AntsBag = 0;
void Init();
void CarryFood(int * pos); …
Run Code Online (Sandbox Code Playgroud)

random performance probability probability-density probability-distribution

5
推荐指数
1
解决办法
75
查看次数

绘制频率计数的概率密度函数

我想将拟合分布转换为频率。

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
%matplotlib notebook

# sample data generation
np.random.seed(42)
data = sorted(stats.lognorm.rvs(s=0.5, loc=1, scale=1000, size=1000))

# fit lognormal distribution
shape, loc, scale = stats.lognorm.fit(data, loc=0)
pdf_lognorm = stats.lognorm.pdf(data, shape, loc, scale)

fig, ax = plt.subplots(figsize=(8, 4))

ax.hist(data, bins='auto', density=True)
ax.plot(data, pdf_lognorm)
ax.set_ylabel('probability')
ax.set_title('Linear Scale')
Run Code Online (Sandbox Code Playgroud)

上面的代码片段将生成以下图:

在此输入图像描述

正如您所看到的,y 轴表示概率。但我希望它是在频率方面。

fig, ax = plt.subplots(figsize=(8, 4))
ax.hist(data, bins='auto')
ax.set_ylabel('probability')
ax.set_title('Linear Scale')
Run Code Online (Sandbox Code Playgroud)

通过取消设置density=True,直方图将按照频率显示。但我不知道如何以与直方图中相同的方式拟合分布 - 观察我如何无法在此直方图中绘制橙色拟合线。

在此输入图像描述

我怎样才能做到这一点?我认为我应该将拟合分布与直方图曲线下的面积相乘,但我不知道该怎么做。

python statistics distribution matplotlib probability-density

5
推荐指数
1
解决办法
7543
查看次数

在 Numpy 中评估(不是采样)Beta 分布

我正在尝试计算Beta(x; a, b)的许多特定值x,以a = 1, b = 25. numpy 中有一个 beta 函数,即numpy.random.beta(a, b). 但它从 beta 分布中采样,而不是评估 的特定值x

有什么快速的方法可以解决这个问题,而不必在 beta 的公式中编码?

numpy probability-density

5
推荐指数
1
解决办法
1657
查看次数