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 都是正确的,因为您始终使用一个公式。
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 都是正确的,因为您始终使用一个公式。