从非均匀数据创建均匀分布的示例

Posted

技术标签:

【中文标题】从非均匀数据创建均匀分布的示例【英文标题】:Sample to Create Uniform Distribution from Non-Uniform Data 【发布时间】:2018-02-06 07:31:12 【问题描述】:

给定一个分布不均匀(高峰值)的数据集,我想重新采样以创建一个分布近似均匀的新数据集。我的做法:

    将数据划分为 bin。 目标 bin 级别 = 所有 bin 中每个 bin 的最小样本数。 随机删除样本,直到每个 bin 计数 = 目标 bin 级别。

有没有更好的技术?

【问题讨论】:

【参考方案1】:

我们知道对于均匀分布,我们有

平均值 = (a+b) / 2

方差 = (b-a)^2 / 12

因此,您可以构建这些并使用这些参数从均匀分布中采样,您可以设置 a = min(data) 和 b = max(data) 或者设置 a = mean(lowest_bin) 和 b = mean(highest_bin ) 或类似的东西。你想如何设置 a 和 b 取决于你的数据和你想要完成的事情

【讨论】:

为简单起见,我们假设我的数据平均值 = 0,范围从 -1 到 +1。听起来您是在说从-1 到+1 之间的均匀分布中选择随机样本。但是这样的样本与我数据中的样本不对应。你是说从均匀分布中选择随机样本,然后从我的数据中选择最接近从均匀分布中提取的值的样本? 嗯,如果您仍然希望对原始数据进行采样,那么最好像您所做的那样做。假设您有 3 个 bin。第一个包含 1 个项目,第二个包含 2 个项目,第三个包含 3 个项目。然后我会确保每个 bin 的概率为 1/3 - 所以 bin1 中的项目有 P = 1/3,bin2 中的两个项目有 P = 1/6(所以它们加起来有 1/3),并且项目在 bin3 中有 P = 1/9。这样您就不需要删除数据点,您只需对它们进行加权,以便我们从每个 bin 中选择一个具有相同概率的项目,这应该会提供大致均匀的分布。 这个答案似乎并没有真正解决这个问题。为什么选择它?

以上是关于从非均匀数据创建均匀分布的示例的主要内容,如果未能解决你的问题,请参考以下文章

从非均匀范围转换浮点数

使用自定义分区器解决Spark DataSet数据分区不均匀的问题

从轮廓生成2D网格

从轮廓生成 2D 网格

Matplotlib - 断轴示例:不均匀的子图大小

3.1.2 QGridLayout网格布局