概率分布

用户指南的这一部分介绍了数学表达式库中包含的概率分布框架。

可视化

可以使用 Zeppelin-Solr 的 zplot 函数和 dist 参数可视化概率分布,该参数可视化分布的概率密度函数 (PDF)。

下面的每个分布都显示了示例可视化。

连续分布

连续概率分布适用于连续数字(浮点数)。以下是支持的连续概率分布。

empiricalDistribution

empiricalDistribution 函数从实际数据创建连续概率分布。

经验分布可用于方便地可视化来自 SolrCloud 集合的随机样本的概率密度函数。下面的示例显示了 zplot 函数可视化具有 32 个 bin 直方图的随机样本的概率密度。

empirical

normalDistribution

下面的可视化显示了 mean 为 0 和 standard deviation 为 1 的正态分布。

dist

logNormalDistribution

下面的可视化显示了 shape 为 .25 和 scale 为 0 的对数正态分布。

lognormal

gammaDistribution

下面的可视化显示了 shape 为 7.5 和 scale 为 1 的伽马分布。

gamma

betaDistribution

下面的可视化显示了 shape1 为 2 和 shape2 为 2 的 beta 分布。

beta

uniformDistribution

下面的可视化显示了 0 到 10 之间的均匀分布。

uniformr

weibullDistribution

下面的可视化显示了 shape 为 5 和 scale 为 1 的 Weibull 分布。

weibull

triangularDistribution

下面的可视化显示了低值为 5、众数为 10 且高值为 20 的三角形分布。

triangular

constantDistribution

下面的可视化显示了 10.5 的常数分布。

constant

离散分布

离散概率分布适用于离散数字(整数)。以下是支持的离散概率分布。

enumeratedDistribution

enumeratedDistribution 函数从值和概率的枚举列表或离散值的数据集创建离散分布函数。

下面的可视化显示了从离散值和概率列表创建的枚举分布。

enum1

下面的可视化显示了从已转换为离散值向量的搜索结果生成的枚举分布。

enum2

poissonDistribution

下面的可视化显示了 mean 为 15 的泊松分布。

poisson

binomialDistribution

下面的可视化显示了具有 100 次试验和 .15 成功概率的二项分布。

binomial

uniformIntegerDistribution

下面的可视化显示了 0 到 10 之间的均匀整数分布。

uniform

geometricDistribution

下面的可视化显示了成功概率为 .25 的几何分布。

geometric

zipFDistribution

下面的可视化显示了大小为 50 和指数为 1 的 ZipF 分布。

zipf

累积概率

cumulativeProbability 函数可以与所有概率分布一起使用,以计算在特定分布中遇到特定随机变量的累积概率。

以下是计算正态分布中随机变量累积概率的示例。

let(a=normalDistribution(10, 5),
    b=cumulativeProbability(a, 12))

在此示例中,创建了一个均值为 10,标准差为 5 的正态分布函数。然后计算此特定分布中值 12 的累积概率。

当此表达式发送到 /stream 处理程序时,它会响应

{
  "result-set": {
    "docs": [
      {
        "b": 0.6554217416103242
      },
      {
        "EOF": true,
        "RESPONSE_TIME": 0
      }
    ]
  }
}

概率

所有概率分布都可以计算某个值范围内的概率。

在以下示例中,从日志集合中提取的文件大小样本创建了一个经验分布。然后计算文件大小在 40000 到 41000 之间的概率为 19%。

let(a=random(logs, q="*:*", fl="filesize_d", rows="50000"),
    b=col(a, filesize_d),
    c=empiricalDistribution(b, 100),
    d=probability(c, 40000, 41000))

当此表达式发送到 /stream 处理程序时,它会响应

{
  "result-set": {
    "docs": [
      {
        "d": 0.19006540560734791
      },
      {
        "EOF": true,
        "RESPONSE_TIME": 550
      }
    ]
  }
}

离散概率

probability 函数可以与任何离散分布函数一起使用,以计算离散值的概率。

以下示例计算泊松分布中离散值的概率。

在该示例中,创建了一个均值为 100 的泊松分布函数。然后计算此特定分布中遇到离散值 101 的样本的概率。

let(a=poissonDistribution(100),
    b=probability(a, 101))

当此表达式发送到 /stream 处理程序时,它会响应

{
  "result-set": {
    "docs": [
      {
        "b": 0.039466333474403106
      },
      {
        "EOF": true,
        "RESPONSE_TIME": 0
      }
    ]
  }
}

采样

所有概率分布都支持采样。 sample 函数从概率分布中返回一个或多个随机样本。

以下是从正态分布中抽取单个样本的示例。

let(a=normalDistribution(10, 5),
    b=sample(a))

当此表达式发送到 /stream 处理程序时,它会响应

{
  "result-set": {
    "docs": [
      {
        "b": 11.24578055004963
      },
      {
        "EOF": true,
        "RESPONSE_TIME": 0
      }
    ]
  }
}

sample 函数还可以返回样本向量。样本向量可以可视化为散点图,以直观地了解基础分布。

第一个示例显示了均值为 0,标准差为 5 的正态分布的散点图。

sample scatter

下一个示例显示了对样本向量应用升序排序的相同分布的散点图。

sample scatter1

下一个示例显示了在同一散点图中叠加的两个不同分布。

sample overlay

多元正态分布

多元正态分布是单变量正态分布向更高维度的推广。

多元正态分布对两个或多个呈正态分布的随机变量进行建模。变量之间的关系由协方差矩阵定义。

采样

sample 函数可用于从多元正态分布中抽取样本,其方式与单变量正态分布非常相似。

不同之处在于,每个样本都将是一个数组,其中包含从每个基础正态分布中抽取的样本。如果抽取多个样本,则 sample 函数将返回一个矩阵,其中每一行包含一个样本。从长远来看,样本矩阵的列将符合用于参数化多元正态分布的协方差矩阵。

下面的示例演示如何从多元正态分布初始化和抽取样本。

在此示例中,从日志记录集合中选择了 5000 个随机样本。每个样本都包含字段 filesize_dresponse_d。两个字段的值都符合正态分布。

然后将两个字段向量化。 filesize_d 向量存储在变量 b 中, response_d 变量存储在变量 c 中。

创建一个数组,其中包含两个向量化字段的均值。

然后将两个向量添加到转置的矩阵中。 这将创建一个观测矩阵,其中每一行包含 filesize_dresponse_d 的一个观测值。然后,使用 cov 函数从观测矩阵的列创建协方差矩阵。协方差矩阵描述了 filesize_dresponse_d 之间的协方差。

然后使用两个字段的均值数组和协方差矩阵调用 multivariateNormalDistribution 函数。多元正态分布的模型分配给变量 g

最后,从多元正态分布中抽取五个样本。

let(a=random(logs, q="*:*", rows="5000", fl="filesize_d, response_d"),
    b=col(a, filesize_d),
    c=col(a, response_d),
    d=array(mean(b), mean(c)),
    e=transpose(matrix(b, c)),
    f=cov(e),
    g=multiVariateNormalDistribution(d, f),
    h=sample(g, 5))

样本以矩阵形式返回,每行代表一个样本。矩阵中有两列。第一列包含 filesize_d 的样本,第二列包含 response_d 的样本。从长远来看,列之间的协方差将符合用于实例化多元正态分布的协方差矩阵。

{
  "result-set": {
    "docs": [
      {
        "h": [
          [
            41974.85669321393,
            779.4097049705296
          ],
          [
            42869.19876441414,
            834.2599296790783
          ],
          [
            38556.30444839889,
            720.3683470060988
          ],
          [
            37689.31290928216,
            686.5549428100018
          ],
          [
            40564.74398214547,
            769.9328090774
          ]
        ]
      },
      {
        "EOF": true,
        "RESPONSE_TIME": 162
      }
    ]
  }
}