Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Numpy.var()和Pandas.var()的不同值_Python_Pandas_Numpy_Scikit Learn_Statistics - Fatal编程技术网

Python Numpy.var()和Pandas.var()的不同值

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吗

我正在学习数据集中的标准Scaler。我注意到一个奇怪的行为,我认为这可能是我代码中的语法或逻辑错误,但有人能纠正我吗

我们知道,当我们使用
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