如何对目标变量的双峰分布进行建模

数据挖掘 机器学习 预测建模 回归
2021-10-01 05:20:49

学习目标分布

我想回归这个目标,尝试了多种转换以使其恢复正常,但没有帮助,在线阅读了一些内容,但到目前为止没有任何建议有效。

我也附上了残差直方图,不知何故,残差是正态分布的。

残差分布

提前致谢。

1个回答

据我了解,您应该寻找适合您的数据的高斯混合模型 - GMM核密度估计 - KDE模型。

这些模型有很多实现,一旦你拟合了 GMM 或 KDE,你就可以生成来自相同分布的新样本,或者获得新样本是否来自相同分布的概率。

在 python 中,一个例子是这样的:(直接取自这里

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
from sklearn.neighbors import KernelDensity

# Plot a 1D density example
N = 100
np.random.seed(1)
X = np.concatenate((np.random.normal(0, 1, int(0.3 * N)),
                    np.random.normal(5, 1, int(0.7 * N))))[:, np.newaxis]

X_plot = np.linspace(-5, 10, 1000)[:, np.newaxis]

true_dens = (0.3 * norm(0, 1).pdf(X_plot[:, 0])
             + 0.7 * norm(5, 1).pdf(X_plot[:, 0]))

fig, ax = plt.subplots()
ax.fill(X_plot[:, 0], true_dens, fc='black', alpha=0.2,
        label='input distribution')

for kernel in ['epanechnikov', 'tophat', 'gaussian']:
    kde = KernelDensity(kernel=kernel, bandwidth=0.5).fit(X)
    log_dens = kde.score_samples(X_plot)
    ax.plot(X_plot[:, 0], np.exp(log_dens), '-',
            label="kernel = '{0}'".format(kernel))

ax.text(6, 0.38, "N={0} points".format(N))

ax.legend(loc='upper left')
ax.plot(X[:, 0], -0.005 - 0.01 * np.random.random(X.shape[0]), '+k')

ax.set_xlim(-4, 9)
ax.set_ylim(-0.02, 0.4)
plt.show()

在此处输入图像描述

最后,该kde模型可用于对新数据点进行采样或预测从该分布生成新样本的概率。

您应该使用 KDE 模型中的不同内核或 GMM 中的基本分布数量,以及其他参数,以获得数据的最佳结果。