【发布时间】:2021-12-28 23:05:58
【问题描述】:
给定下面的代码
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.mixture import BayesianGaussianMixture
df = pd.read_csv("dataset", delimiter=" ")
data = df.to_numpy()
X_train = np.reshape(data, (10*data.shape[0],2))
bgmm = BayesianGaussianMixture(n_components=15,
random_state=7,
max_iter=5000,
n_init=10,
weight_concentration_prior_type="dirichlet_distribution")
bgmm.fit(X_train)
logprob = bgmm.score_samples(X_train)
pdf = np.exp(logprob)
x = np.linspace(0, 1, num=20)
plt.plot(x, pdf, '-k', label='Mixture PDF')
plt.show()
我得到以下离散 pdf:
如何绘制此 pdf 的平滑连续版本?
编辑:
Here is the the dataset:
[[6.11507621 6.2285484 ]
[5.61154419 7.4166868 ]
[5.3638034 8.64581576]
[8.58030274 6.01384676]
[2.06883754 8.5662325 ]
[7.772149 2.29177372]
[0.66223423 0.01642353]
[7.42461573 5.46288677]
[0.82355307 3.60322705]
[1.12966405 9.54888118]
[4.34716189 3.63203485]
[7.95368286 5.74659859]
[3.21564946 3.67576324]
[6.48021187 7.35190659]
[3.02668358 4.41981514]
[0.01745485 7.49153586]
[1.08490595 0.91004064]
[1.89995405 0.38728879]
[4.40549506 2.48715052]
[4.52857064 1.24935027]]
【问题讨论】:
-
不确定发生了什么,但在
linspace的参数中尝试num=200或类似的东西。 -
@RobertDodier:
pdf变量仅包含 20 个条目。因此,在绘图时选择除num=20之外的任何内容都会导致不匹配。 -
好吧,高斯混合是一个连续函数,因此即使这些部分不在数据集中,您也可以通过在许多点上评估它来增加绘图的平滑度。无论如何,如果您发布您正在使用的数据集,这不会有什么坏处。
-
@RobertDodier:如果您检查编辑,我刚刚添加了数据集。
-
我认为绘制的不是 GM 的 pdf;要么你想绘制其他东西(不是 pdf),要么你想绘制 pdf,你需要改变绘图的东西。我假设您确实需要 pdf,在这种情况下,您需要构建一个与数据样本范围大致相同的二维网格,并在该网格上评估 GM pdf。如果您只有 20 个数据点,您可能只想使用几个凹凸(比如说 2 或 3 个)。
标签: python matplotlib scikit-learn