Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从模型预测中获取GMM聚类信息?_Python_Cluster Analysis_Gmm - Fatal编程技术网

Python 如何从模型预测中获取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

我建立了一个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='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
,然后将角落映射到颜色上。