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


9

这与我有关堆栈溢出的编程问题有关贝尔曲线高斯算法(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
如果您的设备随时间改变时间,则不可能将其安装到相同的钟形曲线上。假设你有一组,所以4应该是800,但如果一个新的观察5到达,那么它应该成为800A={1,2,3,4}
mpiktas

1
欢迎使用CrossValidated,NealWalters。您可能会发现,问统计学家“我该怎么做”的常见回答是“您为什么要这样做?”
一站式

@onestop-请参阅我到上一篇文章的链接。在学校里,我记得听过老师在“曲线”上的评分。因此,无论您在考试中获得什么分数,每个分数只会得到一定比例的人。我不知道信用评分如何工作,但这与我所模拟的非常相似。例如,当人们还清贷款时,我会给他们一些积分。但是有些人会还清几十笔贷款。我想将我的野性点压缩为一组归一化点。
NealWalters 2010年

阅读您的最后一条评论,我想知道哪种方法最好:给(例如,每笔还清贷款给1分,为其他事情给其他分),然后尝试驯服最后的巨大得分,或者对每个组成部分做一些更有意义的事情组成最终分数?例如,如果您为还清的贷款提供积分,则可以将已偿还的贷款(LPO)积分计算为对数(1 + NumberOfLoansPaidOff)。因此,已偿还零贷款的人的LPO为0,已偿还3贷款的人的LPO为1.1,而已偿还100贷款的人的LPO为4.6。在5
韦恩

Answers:


13

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

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

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

  • 减去平均值。

  • 除以标准偏差。

  • 乘以100。

  • 加500。

如果结果超出范围,则可以按原样使用它,也可以将其舍入到该范围,方法是向上舍入到200,向下舍入到800。[200,800]

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

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

普通分位数功能可在许多计算平台中使用,包括电子表格(例如Excel的normsinv)。 例如,数据正态分位数(或“正态分数”)为。{1,3,4,5,7}{372,448,500,552,628}

当您的值等于或小于370时,这种“ 常规评分 ”方法将始终获得200到800之间的分数。当您的值等于或小于1111时,除最高和最低外,其他所有得分均在200到800之间。


+1,我删除了我的答案,因为您的方法更好,并使我的过时了:)
mpiktas 2010年

您在哪里获得1-5中的5?4是平均值。应该是1-4吗?我今天正在用Python测试,再次感谢。
NealWalters 2011年

@NealWalters抱歉,这只是手指滑动。我已经修复了它,因此它显示为(1-4)/ 2 * 100 + 500。
whuber

4

您可以尝试这种方法-从而将数据集标准化为介于值-1和+1之间: 这会将数据集中的每个值转换为-1和+1之间的值,而实际的最大值和最小值分别设置为+1和-1,然后将这些+1和-1值重置为+0.9999和-0.9999(以下计算所必需。)

(individual_valuemin_of_all_valuesmax_of_all_valuesmin_of-all_values0.5)2.

然后,对上述每个归一化值应用Fisher变换,以“强制其”以使其大致符合正态分布,然后对这些Fisher变换值中的每个进行“非归一化”,使其值的范围在200到800之间,从而: 最大Fisher变换值将精确设置为800,最小Fisher变换值将被设置精确到200,所有其他值将根据近似正态分布位于这两个极端之间。

Fish_valuemin_all_Fish_valuesmax_all_Fish_valuesmin_all_Fish_values600+200

参考关于SO和可伸缩性问题的原始问题,此方法的优势在于,如果任何新数据点本身都不是整个数据集的新最大值或最小值,则可以将上述计算应用于新数据点在不影响原始数据集任何现有分数的情况下获得200至800之间的分数。如果新数据点是新的最大值或最小值,则必须使用此新的“规格化”最大值或最小值重新计算整个数据集的分数。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.