【问题标题】:The normalization results are not same归一化结果不一样
【发布时间】:2022-01-05 05:07:41
【问题描述】:

我正在对随机数据执行标准化。我计算了数据的平均值和标准偏差,并通过公式 Norm = (data - mean) / std 进行归一化,但我没有得到与 numpy 归一化函数给出的结果相同的结果,而且我没有得到钟形曲线。

import numpy as np
from scipy.stats import norm

a = np.arange(-4, 4)

mean = sum(a/len(a))
std = (np.sqrt(sum((a-mean)**2)/(len(a)-1)))

y1 = norm.pdf(a, mean, std)
y2 = (a - mean) / std

print(y1)
print(y2)

输出

y2 = [0.05868028 0.09674742 0.1350219  0.15950953 0.15950953 0.1350219
 0.09674742 0.05868028]

y1 = [-1.42886902 -1.02062073 -0.61237244 -0.20412415  0.20412415  0.61237244
  1.02062073  1.42886902]

有什么问题?

【问题讨论】:

    标签: python numpy scipy mean normalization


    【解决方案1】:

    换一种说法,将其添加到您的代码中会产生一个等于norm.pdf的值:

    pdf = np.exp(-y2*y2/2)/((2*np.pi)**0.5) / std
    
    

    【讨论】:

      【解决方案2】:

      来自docs

      具体来说,norm.pdf(x, loc, scale) 等同于 norm.pdf(y) / scale with y = (x - loc) / scale.

      所以你不是在比较苹果和苹果:y1 等同于(norm.pdf(y2) / std

      assert (norm.pdf(y2) / std == y1).all()
      

      【讨论】:

        【解决方案3】:

        首先,我们应该对标准化和标准化有相同的定义。您可以通过post了解更多信息。

        那么,您计算的y2 是标准化或z-score 的结果。为了用 scipy 计算 z-score,你应该 scipy.stats.zscore() 而不是 scipy.stats.norm.pdf()

        import numpy as np
        from scipy.stats import zscore
        
        a = np.arange(-4, 4)
        
        y1 = (a - a.mean()) / a.std()
        y2 = zscore(a)
        

        y1y2 将是相同的。

        【讨论】:

          猜你喜欢
          • 2017-05-09
          • 2021-09-21
          • 2012-03-04
          • 1970-01-01
          • 2013-11-17
          • 1970-01-01
          • 2015-07-20
          • 1970-01-01
          • 2017-11-24
          相关资源
          最近更新 更多