如何从模型预测中获取GMM聚类信息?
How to obtain GMM cluster information from model prediction?
我构建了一个 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()
scatter plot colored by predictions
虽然我对我的 df 的每一行都有输出预测,但如果不查看我的 colors
字典,我实际上并不知道它对应于哪个集群,有没有办法做到这一点而不必每次看散点图?
换句话说,我想知道 0 将始终对应于我的灰色簇,或者 1 将始终对应于红色簇,但每次都会改变...
撇开颜色不谈,我如何知道每个簇的位置?标签为 0 是什么意思?
编辑 我相信我的愚蠢问题的答案是使用 np.random.seed
但我可能错了...
你好Hajar,
我想你问题的答案会让你失望。我假设你的 GMM 中的每个高斯都被初始化为一些随机均值和方差。如果您设置随机种子,那么您可以合理地确定生成的簇将始终相同。
话虽如此,在没有随机种子的多标签场景中(据我所知)没有聚类算法可以保证将哪个标签分配给每个集群。
聚类算法任意分配标签。任何聚类算法对分配了特定标签的点的唯一保证是它与某些指标具有相同标签的其他点相似。
这使得衡量聚类算法的准确性变得非常具有挑战性。因此存在调整后的互信息分数和调整后的兰德指数等指标。
你可以用一种半监督的方法来解释这一点,在这种方法中,你强制一个特定的点以 "ground-truth" 标签开始,并希望你的算法将一个集群集中在它上面,但即便如此可能是方差。
祝你好运,希望对你有所帮助。
我构建了一个 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()
scatter plot colored by predictions
虽然我对我的 df 的每一行都有输出预测,但如果不查看我的 colors
字典,我实际上并不知道它对应于哪个集群,有没有办法做到这一点而不必每次看散点图?
换句话说,我想知道 0 将始终对应于我的灰色簇,或者 1 将始终对应于红色簇,但每次都会改变...
撇开颜色不谈,我如何知道每个簇的位置?标签为 0 是什么意思?
编辑 我相信我的愚蠢问题的答案是使用 np.random.seed
但我可能错了...
你好Hajar,
我想你问题的答案会让你失望。我假设你的 GMM 中的每个高斯都被初始化为一些随机均值和方差。如果您设置随机种子,那么您可以合理地确定生成的簇将始终相同。
话虽如此,在没有随机种子的多标签场景中(据我所知)没有聚类算法可以保证将哪个标签分配给每个集群。
聚类算法任意分配标签。任何聚类算法对分配了特定标签的点的唯一保证是它与某些指标具有相同标签的其他点相似。
这使得衡量聚类算法的准确性变得非常具有挑战性。因此存在调整后的互信息分数和调整后的兰德指数等指标。
你可以用一种半监督的方法来解释这一点,在这种方法中,你强制一个特定的点以 "ground-truth" 标签开始,并希望你的算法将一个集群集中在它上面,但即便如此可能是方差。
祝你好运,希望对你有所帮助。