如何将数字数组转换为概率值?

数据挖掘 可能性
2021-09-26 02:25:22

我想要一些关于某些数值计算的帮助。我有一些看起来像这样的数组:数组 1: [0.81893085, 0.54768653, 0.14973508]

阵列 2:[0.48078357, 0.92219683, 1.02359911]

数组中的三个数字中的每一个都代表 k-means 算法中数据点与聚类质心的距离。我想将这些数字转换为概率。具有高距离的元素应转换为低概率。例如,[0.81893085, 0.54768653, 0.14973508] 可以转换为类似于 [0.13, 0.22, 0.65] 的概率向量。可以看出,原始数组中具有高值的元素在概率数组中具有低值(当然概率数组中的值总和为1)。

是否有任何数学技术可以达到这个结果?

到目前为止,我尝试的是,我取了原始数组中每个值的倒数:

1/[0.81893085, 0.54768653, 0.14973508] = [1.22110431, 1.82586195, 6.67846172]

然后我将结果数组输入到 softmax 函数(softmax 函数将数字数组转换为概率) - https://en.wikipedia.org/wiki/Softmax_function

这给出了 [0.00421394, 0.00771491, 0.98807115] 的概率向量。这是一个好方法吗?还有其他方法吗?

3个回答

任何生存函数(1 减去 CDF)都将具有所需的属性。指数在这里可能是一个很好的候选者,因为它有时可以用来描述距离,但如果没有更多信息就很难说。

S(x)=exp(ax)

参数a可以根据数据进行调整或估计

供参考,如果a=1然后你得到,

[0.44,0.58,0.86]

[0.62,0.4,0.36]

分别用于第一个和第二个数组。

这是一个笼统的问题。有很多方法可以标准化给定分布。例如:

  • 正态分布:您可以通过根据变量绘制函数来物理检查函数,然后将其转换为此处给出的正态分布。或者您可以简单地找出mean, and方差,然后使用公式 在此处输入图像描述
  • 也许您可以使用其他答案给出的简单指数分布,例如1 - n ^ (ax) / (Sum of all x's put in the equation in the distribution)或者直接应用 softmax 函数。
  • 您可以像以前一样使用反函数,然后除以所有值的总和。

我想说的是,有 100 种方法可以将数组转换为概率分布,您需要选择最适合您的方法。另外值得注意是,如果您使用此概率分布来计算损失,然后使用梯度下降优化您的模型,您必须确保损失函数是凸的,这直接意味着您的损失函数或您的 PDF 应该注意最终损失是凸的。

你的方法很好。另一种方法将意味着另一个函数,它在 [0,1] 范围内提供输出,使得值的总和应为 1。

您也可以像以前那样只使用倒数,只需将倒数除以它们的总和,即可得到 [0.1255579 , 0.18774104, 0.68670106]。

您还可以在数组上使用exp(-x),给出值 [0.44090279382, 0.5782861116, 0.8609360253],然后除以这些值的总和,得到 [0.23450718, 0.30757856, 0.45791426]。

因此,正如knrumsey在他的回答中所建议的那样,您只需要一个 CDF 即可实现您的结果。但是哪个结果对您的任务有意义取决于您。就像我使用exp(-x)的方法一样,它给出了彼此接近的值。但是您的方法给出了可以自信地说数据点属于第三个集群的值。因此,数学函数的选择及其对结果的解释完全取决于您和您的任务。