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。
有人可以向我解释我弄错了吗?
答案 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都是正确的,因为你一直在使用一个公式。