StandardScaler,sklearn 从我自己的计算中得到不同的结果?

StandarScaler, sklearn get the different result from my own calculation?

StandardScaler in sklearn用于通过公式x_normalize = (x-mean)/std对数据进行归一化。但是,我有不同的结果。

这是我的小例子:

a = pd.DataFrame({'X': [1,2,3,4],
                  'Y': [1,2,4,72]})
StandardScaler().fit_transform(a)

结果是:

array([[-1.34164079, -0.6211513 ],
       [-0.4472136 , -0.58802323],
       [0.4472136 , -0.52176709],
       [ 1.34164079,  1.73094161]])

我试着自己算一下:

a.loc[:,'X'].mean()
Out[61]: 2.5
a.loc[:,'X'].std()
Out[62]: 1.2909944487358056
(1-a.loc[:,'X'].mean())/a.loc[:,'X'].std()
Out[63]: -1.161895003862225

可以看到,在StardardScale的基础上,a.loc[0,'X']1,变换后就是-1.3416。但是我的结果是-1.1618.
我哪里弄错了?

Pandas std 和 numpy std 使用不同的公式来计算标准偏差。在 pandas 中,他们使用:

sigma = sqrt(sum((X-X.mean())**2)/len(X-1))

但在 numpy 中,标准偏差计算为:

sigma = sqrt(sum((X-X.mean())**2)/len(X))

在scikit learn中,他们像标准差一样使用numpy。因此,-1.34 和 -1.16 都是正确的,因为您始终使用一个公式。