Python - 统计分布

Python - Statistical distribution

我对 python 世界还很陌生。另外,我不是统计学家。我需要实现数学家用计算机科学编程语言开发的数学模型。经过一番研究,我选择了 python。我对这样的编程很满意 (PHP/HTML/javascript)。

我有一列值是从 MySQL 数据库中提取的,需要计算以下值 -

1) Normal distribution of it. (I don't have the sigma & mu values. These need to be calculated too apparently). 
2) Mixture of normal distribution
3) Estimate density of normal distribution
4) Calculate 'Z' score

值数组看起来类似于下面的值(我填充了示例数据)-

d1 = [3,3,3,3,3,3,3,9,12,6,3,3,3,3,9,21,3,12,3,6,3,30,12,6,3,3,24,30,3,3,3]


mu1, std1 = norm.fit(d1)

正态分布,我理解可以计算如下 -

import numpy as np
from scipy.stats import norm

mu, std = norm.fit(data)

我能得到一些关于如何开始使用 (2)、(3) 和 (4) 的指示吗?我会继续在网上查找,因为我期待听到专家的意见。

如果问题不完全合理,请务必让我知道缺少哪个方面,以便我尝试获取相关信息。

如有任何帮助,我将不胜感激。

你的问题有些地方不清楚。它可能有助于提供您正在努力实现的目标的背景,而不是您正在采取的具体步骤。

1) + 3) 在正态分布中——拟合分布,估计均值和标准差——基本上是一回事。均值和标准差 完全决定了 分布。

mu, std = norm.fit(data)

等于说"find the mean and standard deviation which best fit the distribution"。

4) 计算 Z 分数 - 你必须解释你想要做什么。 usually means 数据点的平均值高于(或低于)多少,以标准差为单位。这是你在这里需要的吗?如果是这样,那简直就是

(np.array(data) - mu) / std

2) 正态分布的混合——这是完全不清楚的。它通常意味着分布实际上是由多个正态分布产生的。你这是什么意思?

关于 (2),网络搜索 "mixture of Gaussians Python" 应该会出现很多结果。

高斯混合是一个非常简单的想法——密度包含多个凸起,而不是单个高斯凸起。密度是加权和 $\sum_k \alpha_k g(x, \mu_k, \sigma_k^2)$ 其中权重 $\alpha_k $ 为正且总和为 1,并且 $g(x, \mu, \sigma^2)$ 是单个高斯凸点。

为了确定参数 $\alpha_k$、$\mu_k$ 和 $\sigma_k^2$,通常使用所谓的期望最大化 ( EM)算法。同样,网络搜索应该会找到很多匹配项。高斯混合的 EM 算法在一些 Python 库中实现。自己编写并不太复杂,但也许要开始使用现有的实现。