Python Numpy.var()和Pandas.var()的不同值
我正在学习数据集中的标准Scaler。我注意到一个奇怪的行为,我认为这可能是我代码中的语法或逻辑错误,但有人能纠正我吗 我们知道,当我们使用Python Numpy.var()和Pandas.var()的不同值,python,pandas,numpy,scikit-learn,statistics,Python,Pandas,Numpy,Scikit Learn,Statistics,我正在学习数据集中的标准Scaler。我注意到一个奇怪的行为,我认为这可能是我代码中的语法或逻辑错误,但有人能纠正我吗 我们知道,当我们使用StandardScaler时,我们的std为1,而mean为0,即Var=Stdev^2 现在,当我在代码中使用sklearn.preprocessing.StandardScaler时,使用fit\u transform后,方差为1。但当我更改原始数据帧中的值时,两行的值都是1.5。我可以知道为什么是它以及如何使用StandardScaler使其成为1吗
StandardScaler
时,我们的std
为1,而mean
为0,即Var=Stdev^2
现在,当我在代码中使用sklearn.preprocessing.StandardScaler
时,使用fit\u 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
这是我的密码
来自sklearn.preprocessing导入StandardScaler的
ss=StandardScaler()
var=ss.fit_变换(catDf.iloc[:,1:-1]).var()#此方差等于1
catDf.iloc[:,1:-1]=ss.fit_变换(catDf.iloc[:,1:-1])
打印(“Numpy数组中的差异”,var)#约1
打印(“数据帧中的差异”,catDf.var())#1.5,用于两个数字列
希望你明白我想说的。问题是由于使用了不同的自由度。scikit学习文档声明他们使用有偏差的估计器或样本方差: 我们对标准偏差使用有偏估计,相当于numpy.std(x,ddof=0)。请注意,ddof的选择不太可能影响模型性能 另一方面,
DataFrame.var
默认为无偏估计器
返回请求轴上的无偏方差。默认情况下,标准化为N-1。这可以使用ddof参数进行更改
只有3个点,除以3或2的差值将导致1.5倍的差值(与您看到的完全相同)。对于DataFrame.var()
print(catDf.var(ddof=0))
#GDP 1.0
#Area 1.0