我正在学习数据集中的标准Scaler。我注意到一个奇怪的行为,我认为这可能是我代码中的语法或逻辑错误,但有人能纠正我吗
正如我们所知,当我们做StandardScaler
的时候,我们有一个std
的1和mean
的0作为Var = Stdev^2
现在,当我在代码中使用sklearn.preprocessing.StandardScaler
时,在使用fit_transform
之后,方差是1
。但当我更改原始数据帧中的值时,两行的值都是1.5。我能知道为什么是它以及如何使用StandardScaler
使它成为1吗。谢谢
这是我的数据集
Country GDP Area Continent
0 India 2.79 3.287 Asia
1 USA 20.54 9.840 North America
2 China 13.61 9.590 Asia
这是我的密码
from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
var = ss.fit_transform(catDf.iloc[:,1:-1]).var() #This variance is equal to 1
catDf.iloc[:,1:-1] = ss.fit_transform(catDf.iloc[:,1:-1])
print("Variance in Numpy array", var) # Approx 1
print("Variance in Data Frame", catDf.var())# 1.5 for both numerical columns
希望你明白我想说的
问题是由于使用了不同的自由度。scikit学习文档声明他们使用有偏差的估计器或样本方差:
另一方面,默认情况下,
DataFrame.var
是无偏的估计量只有3个点,除以3或2的差值将导致1.5倍的差值(与您看到的完全相同)。通过对
DataFrame.var()
使用ddof=0
来解决这个问题相关问题 更多 >
编程相关推荐