我为 StandardScaler 创建了一个函数,这里是:
def ss_func(dff):
df_mean = dff.mean()
df_std = dff.std()
dff_scaled = (dff - df_mean) / df_std
return print(dff_scaled)
我在数据中使用它,得到这个结果:
first second third
0 -0.767772 -0.518494 -1.704506
1 0.383886 1.774325 0.046770
2 -0.658090 -0.612765 0.239047
3 1.590385 -0.340051 0.829734
4 -0.548408 -0.303016 0.588955
但是当我使用 sklearn.preprocessing 中的 StandardScaler 时,我看到了一个不同的结果:
[[-0.85839508 -0.5796934 -1.905696 ]
[ 0.42919754 1.98375598 0.05229044]
[-0.73576721 -0.6850922 0.26726224]
[ 1.77810408 -0.38018853 0.92767112]
[-0.61313934 -0.33878186 0.6584722 ]]
为什么?
问题出在不同的.std默认参数。 Pandas 使用
ddof=1
创建一个无偏估计器,而不是一个经验估计器(ddof=0
numpy 会使用)。
def ss_func(dff):
df_mean = dff.mean()
df_std = dff.std(ddof=0)
dff_scaled = (dff - df_mean) / df_std
return dff_scaled
应该修复它