gpt4 book ai didi

python - pandas 和 numpy 之间 std 的不同结果

转载 作者:行者123 更新时间:2023-11-28 20:35:55 27 4
gpt4 key购买 nike

我试图从其平均值中减去列中的每个元素并除以标准差。我用两种不同的方式(numeric_data1numeric_data2):

import pandas as pd
data = pd.read_csv("https://s3.amazonaws.com/demo-datasets/wine.csv")
numeric_data = data.drop("color", 1)
numeric_data1 = ((numeric_data - numeric_data.mean()) /
numeric_data.std())
numeric_data2 = ((numeric_data - np.mean(numeric_data, axis=0)) /
np.std(numeric_data, axis=0))

type(numeric_data1) # -> pandas.core.frame.DataFrame
type(numeric_data2) # -> pandas.core.frame.DataFrame

两者都是 pandas dataframes,它们应该有相同的结果。但是,我得到了不同的结果:

numeric_data2 == numeric_data1  # -> False

我认为问题源于 numpy 和 pandas 如何处理数字精度:

numeric_data.mean() == np.mean(numeric_data, axis=0)      # -> True
numeric_data.std(axis=0) == np.std(numeric_data, axis=0) # -> False

对于 mean numpy 和 pandas 给了我同样的东西,但是对于标准差,我得到的结果几乎没有什么不同。

我的评估是正确的还是我犯了一些错误?

最佳答案

在计算标准差时,重要的是您是用该总体的较小样本估计整个总体的标准差,还是计算整个总体的标准差。

如果它是较大总体中的较小样本,您需要所谓的样本标准差。事实证明,当您将均值的平方差之和除以观察次数时,您最终会得到一个有偏估计量。我们通过除以比观察次数少一来纠正这一点。我们使用参数 ddof=1 来控制样本标准差或 ddof=0 来控制总体标准差。

事实是,样本量大并不重要。但是您会看到细微的差别。

pandas.DataFrame.std 中使用自由度参数调用:

import pandas as pd
data = pd.read_csv("https://s3.amazonaws.com/demo-datasets/wine.csv")
numeric_data = data.drop("color", 1)
numeric_data1 = ((numeric_data - numeric_data.mean()) /
numeric_data.std(ddof=0)) # <<<
numeric_data2 = ((numeric_data - np.mean(numeric_data, axis=0)) /
np.std(numeric_data, axis=0))

np.isclose(numeric_data1, numeric_data2).all() # -> True

或者在np.std调用:

import pandas as pd
data = pd.read_csv("https://s3.amazonaws.com/demo-datasets/wine.csv")
numeric_data = data.drop("color", 1)
numeric_data1 = ((numeric_data - numeric_data.mean()) /
numeric_data.std())
numeric_data2 = ((numeric_data - np.mean(numeric_data, axis=0)) /
np.std(numeric_data, axis=0, ddof=1)) # <<<

np.isclose(numeric_data1, numeric_data2).all() # -> True

关于python - pandas 和 numpy 之间 std 的不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46083461/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com