scipy Zscore似乎在计算z值时出现了细微的错误

fae0ux8s  于 2023-05-17  发布在  其他
关注(0)|答案(1)|浏览(212)

我试图使用scipy.stats计算数据集的z分数,并且遇到了一个非常奇怪的微妙错误,我无法弄清楚。代码正在运行,但似乎产生的数据略有偏差,我担心这会对我在规范化数据集上运行的PCA产生不利影响。
我在列表中有以下数据:

mylist = [0.565, 0.629, 0.687, 0.797, 0.56, 0.722]

我运行以下命令,使用scipy.stats对数据进行Z-score标准化:

import scipy.stats as scipy
zscore_list = scipy.zscore(mylist)
[-1.11793077, -0.36479846,  0.31772769,  1.61217384, -1.17676923, 0.72959692]

然而,当我手动计算相同的数据时,我得到了不同的结果:

import statistics as stats
for x in mylist:
`print(str((x-stats.mean(mylist))/stats.stdev(mylist)))`

结果:

-1.0205264990693814
-0.33301391022264026
0.29004437341971895
1.471706635500054
-1.074238420073032
0.6660278204452793

我尝试了各种方法来解决这个问题,包括将“mylist”转换为numpy数组,在调用“scipy.zscore”时使用axis=None和ddof=0,结果没有任何变化。

pdsfdshx

pdsfdshx1#

更新:所以我想通了,我想我会把这个留给任何感兴趣的人。
有两种方法可以计算标准偏差:* 总体 * 标准差,即均值的平方差之和除以总体大小 N,或 * 样本 * 标准差,即均值的平方差之和除以样本大小 n-1
事实证明,NumPy(以及SciPy)默认使用人口标准差。这很少是适当的;对于大多数应用程序,其中一个是推断人口水平的统计数据,通过借鉴一个样本,样本标准偏差是更合适的。为了纠正这一点,我在对scipy.stats.zscore的调用中设置了ddof=1,这样就解决了计算错误的问题。
希望这对某人有帮助!

相关问题