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

2024-10-02 00:36:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习数据集中的标准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

希望你明白我想说的


Tags: 数据代码invartransformsklearnssfit
1条回答
网友
1楼 · 发布于 2024-10-02 00:36:36

问题是由于使用了不同的自由度。scikit学习文档声明他们使用有偏差的估计器或样本方差:

We use a biased estimator for the standard deviation, equivalent to numpy.std(x, ddof=0). Note that the choice of ddof is unlikely to affect model performance.

另一方面,默认情况下,DataFrame.var是无偏的估计量

Return unbiased variance over requested axis. Normalized by N-1 by default. This can be changed using the ddof argument

只有3个点,除以3或2的差值将导致1.5倍的差值(与您看到的完全相同)。通过对DataFrame.var()使用ddof=0来解决这个问题

print(catDf.var(ddof=0))
#GDP     1.0
#Area    1.0

相关问题 更多 >

    热门问题