如何绘制具有 20 个特征的模型的密度估计等高线?
How to plot density estimation contours of a model with 20 features?
我正在跟随 this sample 对下面的贝叶斯高斯混合模型进行密度估计:
bgmm = BayesianGaussianMixture(n_components=10, random_state=7, max_iter=5000).fit(data)
其中 data
(作为数据框)包含 20 列数字数据。
我可以通过
简单地绘制bgmm
的两个特征的模型
x = np.linspace(-20.0, 30.0)
y = np.linspace(-20.0, 40.0)
X, Y = np.meshgrid(x, y)
XX = np.array([X.ravel(), Y.ravel()]).T
Z = -bgmm.score_samples(XX)
Z = Z.reshape(X.shape)
CS = plt.contour(
X, Y, Z, norm=LogNorm(vmin=1.0, vmax=1000.0), levels=np.logspace(0, 3, 10)
)
CB = plt.colorbar(CS, shrink=0.8, extend="both")
plt.scatter(data[:, 0], data[:, 1], 0.8)
plt.show()
但是,如何以密度等高线的形式绘制所有的簇?
我认为您需要在拟合之前将数据放入一个大的两列数组中,因此定义一个新的 X_train
将所有十对列组合成一对大列。
首先,将data
转换成数组:
data_array = data.to_numpy()
然后重塑成两列:
X_train = np.reshape(data_array, (10*data_array.shape[0], 2))
然后用它调用 mixture.fit
方法而不是 data
。然后继续跟随示例,像他们一样使用 X_train
(当然使用 bgmm
而不是 clf
)。
我正在跟随 this sample 对下面的贝叶斯高斯混合模型进行密度估计:
bgmm = BayesianGaussianMixture(n_components=10, random_state=7, max_iter=5000).fit(data)
其中 data
(作为数据框)包含 20 列数字数据。
我可以通过
简单地绘制bgmm
的两个特征的模型
x = np.linspace(-20.0, 30.0)
y = np.linspace(-20.0, 40.0)
X, Y = np.meshgrid(x, y)
XX = np.array([X.ravel(), Y.ravel()]).T
Z = -bgmm.score_samples(XX)
Z = Z.reshape(X.shape)
CS = plt.contour(
X, Y, Z, norm=LogNorm(vmin=1.0, vmax=1000.0), levels=np.logspace(0, 3, 10)
)
CB = plt.colorbar(CS, shrink=0.8, extend="both")
plt.scatter(data[:, 0], data[:, 1], 0.8)
plt.show()
但是,如何以密度等高线的形式绘制所有的簇?
我认为您需要在拟合之前将数据放入一个大的两列数组中,因此定义一个新的 X_train
将所有十对列组合成一对大列。
首先,将data
转换成数组:
data_array = data.to_numpy()
然后重塑成两列:
X_train = np.reshape(data_array, (10*data_array.shape[0], 2))
然后用它调用 mixture.fit
方法而不是 data
。然后继续跟随示例,像他们一样使用 X_train
(当然使用 bgmm
而不是 clf
)。