Patsy 和 Pandas 之间的标准化结果不同 - Python
Standardization Result is different between Patsy & Pandas - Python
我发现了一个有趣的问题,很想听听您的解释。
from patsy import dmatrix,demo_data
df = pd.DataFrame(demo_data("a", "b", "x1", "x2", "y", "z column"))
Patsy_Standarlize_Output = dmatrix("standardize(x2) + 0",df).ravel()
output = (df['x2'] - df['x2'].mean()) / df['x2'].std()
Pandas_Standarlize_Output = output.ravel()
如果您打印标准化 x2 列 的结果,您会发现结果大不相同。结果如下:
Patsy_Standarlize_Output = [-1.21701061, -0.07791372, -0.66884723, 2.23584028, 0.69898536, -0.71843674, -0.00416815, -0.2484492=][=13
Pandas_Standarlize_Output = [-1.13840918, -0.07288161, -0.62564929, 2.09143707, 0.65384094, -0.67203603, -0.00389895, -0.23240294][=13]
我的问题是,我对同一列进行了标准化,为什么结果不同?
期待您精彩的解读!非常感谢您的宝贵时间和帮助!
pandas' std()
执行 Bessel correction,而大多数其他库则不会。一旦你有几十个点,这实际上并不重要,但对于小样本,这是一个非常合理的事情。
证明:如果将 df['x2'].std()
替换为 numpy 版本 (df['x2'].values.std()
),结果将匹配
我发现了一个有趣的问题,很想听听您的解释。
from patsy import dmatrix,demo_data
df = pd.DataFrame(demo_data("a", "b", "x1", "x2", "y", "z column"))
Patsy_Standarlize_Output = dmatrix("standardize(x2) + 0",df).ravel()
output = (df['x2'] - df['x2'].mean()) / df['x2'].std()
Pandas_Standarlize_Output = output.ravel()
如果您打印标准化 x2 列 的结果,您会发现结果大不相同。结果如下:
Patsy_Standarlize_Output = [-1.21701061, -0.07791372, -0.66884723, 2.23584028, 0.69898536, -0.71843674, -0.00416815, -0.2484492=][=13
Pandas_Standarlize_Output = [-1.13840918, -0.07288161, -0.62564929, 2.09143707, 0.65384094, -0.67203603, -0.00389895, -0.23240294][=13]
我的问题是,我对同一列进行了标准化,为什么结果不同?
期待您精彩的解读!非常感谢您的宝贵时间和帮助!
pandas' std()
执行 Bessel correction,而大多数其他库则不会。一旦你有几十个点,这实际上并不重要,但对于小样本,这是一个非常合理的事情。
证明:如果将 df['x2'].std()
替换为 numpy 版本 (df['x2'].values.std()
),结果将匹配