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

时间:2018-05-23 05:02:24

标签: python pandas scikit-learn normalize

sklearn中的StandardScaler用于通过以下公式对数据进行标准化: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。

有人可以向我解释我弄错了吗?

1 个答案:

答案 0 :(得分:4)

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

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

但在numpy标准偏差计算如下:

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

在scikit学习中,他们使用像标准偏差那样的numpy。因此,-1.34和-1.16都是正确的,因为你一直在使用一个公式。