Python将连续变量输入数据数字化为离散变量(bin),其中分布为正态高斯分布



我有一个要离散化的各种数据(连续变量(的时间序列。现在,我的理解是python的"bin",digitale函数将它们沿着max/min范围线性分组。

但是,我希望创建bin值,以便bin值将基础数据分布分组为正态高斯分布。我如何调整下面简单的代码来做到这一点?

data_X = [x1, x2, x3,  ...., xi] 
data_Y = [y1, y2, y3, ....., yi]
bins_ = np.interp(np.linspace(0, len(data_X), bins), np.arange(len(data_X)), np.sort(data_X)) 
pred_ = np.digitize(data_X, bins_)

np.digitize(data_X, bins)根据您用bins给它的bin边对值进行分组。如果您使用

bins = np.linspace(data_X.min(), data_X.max(), num=10)

您将获得线性bin边缘。这导致以高斯方式填充仓(中间仓的值更多,外部仓的值更少(,但基于数据中的最小值/最大值。

相反,您可以根据已知分布或数据来计算仓边。例如,可以基于标准偏差sigma为零的正态分布创建仓边,并在仓中包括sds标准偏差:

sds = 3
bins = np.concatenate( ([data_X.min()], np.linspace(-sds*sigma, sds*sigma, sds*2+1), [data_X.max()] ) ) 

data_X.min/max用于欠/溢出。完全数据驱动的箱子跟随你的输入功能会是这样的:

bins = np.quantile(data_X, np.arange(0, 1, 0.1))

使用所有这些bin,您可以调用np.digitize(data_X, bins)并获得给定的分布。

最新更新