Python 如何从模型预测中获取GMM聚类信息?
我建立了一个GMM模型,并用它来进行预测Python 如何从模型预测中获取GMM聚类信息?,python,cluster-analysis,gmm,Python,Cluster Analysis,Gmm,我建立了一个GMM模型,并用它来进行预测 bead = df['Ce140Di'] dna = df['DNA_1'] X = np.column_stack((dna, bead)) # create a 2D array from the two lists #plt.scatter(X[:,0], X[:,1], s=0.5, c='black') #plt.show() gmm = GaussianMixture(n_components=4, covariance_type='ti
bead = df['Ce140Di']
dna = df['DNA_1']
X = np.column_stack((dna, bead)) # create a 2D array from the two lists
#plt.scatter(X[:,0], X[:,1], s=0.5, c='black')
#plt.show()
gmm = GaussianMixture(n_components=4, covariance_type='tied')
gmm.fit(X)
labels = gmm.predict(X)
然后生成一个如下图
df['predicted_cluster'] = labels
fig= plt.figure()
colors = {1:'red', 2:'orange', 3:'purple', 0:'grey'}
plt.scatter(df['DNA_1'], df['Ce140Di'], c=df['predicted_cluster'].apply(lambda x: colors[x]), s = 0.5, alpha=0.5)
plt.show()
虽然我对df的每一行都有输出预测,但如果不查看我的colors
字典,我实际上不知道它对应于哪个簇,有没有一种方法可以做到这一点而不必每次查看散点图?
换句话说,我想知道0将始终对应于我的灰色簇,或者1将始终是红色簇,但每次都会发生变化
撇开颜色不谈,我如何知道每个簇的位置?0的标签是什么意思
EDIT我相信我可能愚蠢的问题的答案是使用np.random.seed
,但我可能错了…Hello Hajar
我想你问题的答案会让你失望。我假设GMM中的每一个高斯分布都被初始化为一些随机均值和方差。如果您设置了一个随机种子,那么您可以合理地确定生成的簇始终是相同的
也就是说,在没有随机种子的多标签场景中,(据我所知)没有任何集群算法可以保证将哪个标签分配给每个集群
聚类算法任意分配标签。任何聚类算法对指定某个标签的点的唯一保证是,它与具有相同标签的其他点在某些度量上相似
这使得测量聚类算法的准确性非常具有挑战性。因此,存在调整后的互信息得分和调整后的兰德指数等指标
你可以用一种半监督的方法来解释这一点,在这种方法中,你强制一个特定的点从一个“基本真理”标签开始,并希望你的算法将一个簇集中在它上面,但即使这样,也可能会有差异
Goodluck,我希望这会有所帮助。修复种子的工作原理是每次都会复制相同的集群——我建议将参数
random\u state
传递给GaussianMixture
。gmm.weights\u
应该为您提供中心,正如我建议您创建一个函数角点(标签)中所述
根据标签中心将每个标签0-3映射到角落ll
(左下)、ul
、ur
或lr
,然后将角落映射到颜色上。