概率分布
本用户指南部分介绍数学表达式库中包含的概率分布框架。
可视化
可以使用 Zeppelin-Solr 和 zplot
函数(带 dist
参数)对概率分布进行可视化,该函数可视化分布的概率密度函数 (PDF)。
每个分布的示例可视化如下所示。
连续分布
连续概率分布适用于连续数字(浮点数)。以下是支持的连续概率分布。
离散分布
离散概率分布适用于离散数字(整数)。以下是支持的离散概率分布。
累积概率
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
}
]
}
}
采样函数还可以返回样本向量。样本向量可以可视化为散点图,以直观地了解底层分布。
第一个示例显示均值为 0、标准差为 5 的正态分布的散点图。
下一个示例显示了对样本向量应用升序排序的相同分布的散点图。
下一个示例显示了在同一散点图中叠加的两个不同的分布。
多元正态分布
多元正态分布是一元正态分布向更高维度的推广。
多元正态分布对两个或更多个正态分布的随机变量进行建模。变量之间的关系由协方差矩阵定义。
采样
sample
函数可用于从多元正态分布中绘制样本,其方式与一元正态分布非常相似。
不同之处在于,每个样本将是一个包含从每个底层正态分布中绘制的样本的数组。如果绘制多个样本,则 sample
函数将返回一个矩阵,其中每一行都有一个样本。从长远来看,样本矩阵的列将符合用于参数化多元正态分布的协方差矩阵。
以下示例演示如何初始化和从多元正态分布中绘制样本。
在此示例中,从日志记录集合中选择了 5000 个随机样本。每个样本都包含字段 filesize_d
和 response_d
。这两个字段的值都符合正态分布。
然后对这两个字段进行向量化。filesize_d
向量存储在变量 b
中,response_d
变量存储在变量 c
中。
创建一个包含这两个向量化字段的均值的数组。
然后将这两个向量添加到一个转置的矩阵中。这将创建一个观测矩阵,其中每行包含 filesize_d
和 response_d
的一个观测值。然后使用 cov
函数从观测矩阵的列创建协方差矩阵。协方差矩阵描述了 filesize_d
和 response_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
}
]
}
}