gpt4 book ai didi

python - 如何对非正态分布进行标准化?

转载 作者:行者123 更新时间:2023-12-03 03:34:55 29 4
gpt4 key购买 nike

n a

我的上述分布的平均值为 -0.02,标准差为 0.09,样本大小为 13905

我只是不确定为什么在样本量很大的情况下分布是左偏的。从 bin [-2.0 到 -0.5],该 bin 中只有 10 个样本计数/离群值,这解释了这种形状。

我只是想知道是否可以标准化以使其更加平滑和“正态”分布。目的是将其输入模型,同时减少预测器的标准误差。

最佳答案

这里有两个选择。您可以选择 Box-Cox 变换或 Yeo-Johnson 变换。 Box-Cox 变换的问题在于它仅适用于正数。要使用 Box-Cox 变换,您必须采用指数,执行 Box-Cox 变换,然后取对数以获取原始比例的数据。 Box-Cox 变换可在 scipy.stats

中使用

您可以避免这些步骤,只需使用 Yeo-Johnson 变换即可。 sklearn 为此提供了一个 API

from matplotlib import pyplot as plt
from scipy.stats import normaltest
import numpy as np
from sklearn.preprocessing import PowerTransformer

data=np.array([-0.35714286,-0.28571429,-0.00257143,-0.00271429,-0.00142857,0.,0.,0.,0.00142857,0.00285714,0.00714286,0.00714286,0.01,0.01428571,0.01428571,0.01428571,0.01428571,0.01428571,0.01428571,0.02142857,0.07142857])

pt = PowerTransformer(method='yeo-johnson')
data = data.reshape(-1, 1)
pt.fit(data)
transformed_data = pt.transform(data)

我们已经改变了数据,但我们需要一种方法来衡量并查看我们是否朝着正确的方向前进。由于我们的目标是走向正态分布,因此我们将使用正态性检验。

k2, p = normaltest(data)
transformed_k2, transformed_p = normaltest(transformed_data)

测试返回两个值k2pp 的值是我们感兴趣的。如果p大于某个阈值(例如0.001左右),我们可以说拒绝数据来自正态分布的假设。

在上面的示例中,您将看到 p 大于 0.001,而 transformed_p 小于此阈值,这表明我们朝着正确的方向前进。

关于python - 如何对非正态分布进行标准化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53624804/

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