将一组数字强制为高斯钟形曲线

机器算法验证 算法 正态分布
2022-03-28 06:24:58

这与我在 Stack Overflow 上的编程问题有关贝尔曲线高斯算法(Python 和/或 C#)。)

在 Answers.com 上,我发现了这个简单的例子:

  1. 求算术平均值(平均值)=> 集合中所有值的总和,除以集合中元素的数量
  2. 求集合中所有值的平方和
  3. 将 (2) 的输出除以集合中的元素数
  4. 从 (3) 的输出中减去均值 (1) 的平方
  5. 取 (4) 的结果的平方根

示例:设置 A={1,3,4,5,7}

  1. (1+3+4+5+7)/5 = 4
  2. (1*1+3*3+4*4+5*5+7*7)=1+9+16+25+49=100
  3. 100 / 5 = 20
  4. 20 - 4*4=20-16 = 4
  5. SQRT(4) = 2

(这来自wiki.answers.com上的帖子。)

现在考虑到所有这些,我如何将上述数据拟合到从 200 到 800 的钟形曲线(例如信用评分)。显然,上述集合中的数字 5 将是 500。但是确定什么的公式是什么3 应该在同一尺度上。尽管原始集合 Set A={1,3,4,5,7} 不是钟形曲线,但我想将其强制为钟形曲线。

想象一下,这些是 5 个人的分数。下个月的分数可能会发生如下变化: 设置A2={1,2,4,5,9}(一个人失去一分,排名靠前的人再获得两分——富人更富,穷人更穷)。然后也许会有一个新人进入集合: Set A3={1,2,4,5,8,9}

2个回答

缩放范围,如 200 到 800(例如SAT ),只是测量单位的变化(它的工作原理就像将华氏温度更改为摄氏温度一样。)

中间值 500 旨在对应于数据的平均值。当数据确实遵循正态分布(“钟形曲线”)时,该范围旨在对应于大约 99.7% 的数据。保证包含 8/9 的数据(比雪夫不等式)。

在这种情况下,公式 1-5 计算数据的标准差。这只是原始数据的新计量单位。需要对应新尺度中的100个单位。因此,要将原始值转换为缩放值,

  • 减去平均值。

  • 除以标准差。

  • 乘以 100。

  • 加500。

如果结果超出范围[200,800]您可以按原样使用它,也可以通过向上舍入到 200、向下舍入到 800 来“钳制”它。

在示例中,使用数据{1,3,4,5,7},平均值为4SD是2. 因此,在重新缩放时,1变成(14)/2100+500=350. 类似地计算的整个重新缩放的数据集是{350,450,500,550,650}.

当原始数据以明显不正常的方式分布时,您需要另一种方法您不再计算平均值或 SD。相反,将所有分数按顺序排列,从第 1(最小)到nth(最大)。这些是他们的队伍转换任何等级i成它的百分比 (i1/2)/n. (在示例中,n=5并且数据已经按顺序排列i=1,2,3,4,5. 因此他们的百分比是1/10,3/10,5/10,7/10,9/10,通常等价地写为10%,30%等)对应于任何百分比(之间01, 必然) 是一个正常的分位数它是用与误差函数密切相关的正态分位数函数计算的。(简单的数值近似值很容易编码。)它的值通常在 -3 到 3 之间,必须重新调整(就像以前一样)到范围[200,800]. 首先将正常分位数乘以 100,然后再加上 500。

正常的分位数函数可用于许多计算平台,包括电子表格(例如 Excel 的normsinv)。 例如,数据的正态分位数(或“正态分数”){1,3,4,5,7}{372,448,500,552,628}.

当您有 370 或更少的值时,这种“正常评分”方法将始终给出 200 到 800 之间的分数。当您有 1111 个或更少的值时,除了最高和最低值之外,所有值的分数都在 200 到 800 之间。

您可以尝试这种方法 - 将您的数据集标准化为值 -1 和 +1 之间的范围,因此:

(individual_valuemin_of_all_valuesmax_of_all_valuesmin_of-all_values0.5)2.
这会将数据集中的每个值转换为 -1 和 +1 之间的值,实际最大值和最小值分别设置为 +1 和 -1,然后将这些 +1 和 -1 值重置为 +0.9999和 -0.9999(以下计算所必需的。)

然后将Fisher 变换应用于上述每个归一化值以“强制”它大致符合正态分布,然后将这些 Fisher 变换值中的每一个“取消归一化”以使其值介于 200 和 800 之间,因此:

Fish_valuemin_all_Fish_valuesmax_all_Fish_valuesmin_all_Fish_values600+200
根据近似正态分布,Fisher 变换的最大值将精确设置为 800,Fisher 变换的最小值将精确设置为 200,并且所有其他值将位于这两个极值之间。

参考您关于 SO 和可扩展性问题的原始问题,这种方法的优点是,如果任何新数据点本身不是整个数据集的新最大值或最小值,您可以将上述计算应用于新数据点在不影响原始数据集的任何现有分数的情况下获得 200 到 800 之间的分数。如果一个新的数据点是一个新的最大值或最小值,您将不得不使用这个新的“标准化”最大值或最小值重新计算整个数据集的分数。