如何对目标变量的双峰分布进行建模
数据挖掘
机器学习
预测建模
回归
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 中的基本分布数量,以及其他参数,以获得数据的最佳结果。


