我正在按照此示例對下面的貝葉斯高斯混合模型進行密度估計:
bgmm = BayesianGaussianMixture(n_components=10, random_state=7, max_iter=5000).fit(data)
其中data(作為資料框)包括 20 列數字資料。
我可以簡單地為bgmmby 的兩個特征繪制模型
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()
但是,如何以密度等高線的形式繪制所有集群?
uj5u.com熱心網友回復:
我相信您需要在擬合之前將資料放入一個大的兩列陣列中,因此定義一個新的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)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/357844.html
標籤:Python matplotlib scikit-学习
上一篇:Python-繪制線性百分比圖
