我正在运行一个k-均值算法(k=5(来对我的数据进行聚类。为了检查算法的稳定性,我首先在整个数据集上运行一次算法,然后在2/3的数据集上多次运行算法(使用不同的随机状态进行拆分(。我用这些结果来预测我剩下的1/3数据的聚类。最后,我想将预测的聚类与我在整个数据集上运行k-means时得到的聚类进行比较。这就是我陷入困境的地方。
由于k-means总是为(或多或少(相同的聚类分配不同的标签,我不能只是比较它们。我尝试使用.value_counts()
根据标签的频率重新分配标签0到4。但因为我多次运行此检查,所以我需要一个能循环工作的东西
基本上,当我使用.value_counts()
时,我会得到这样的东西:
PredictedCluster
4 55555
0 44444
2 33333
1 22222
3 11111
我希望我能把它变成一个数组,其中标签按大小排序:
a = [[4, 55555],[0,44444],...,[3,11111]]
有人能告诉我如何做到这一点吗?或者我可以用什么其他方法来解决我的问题?
类似下面一行的东西可以工作:
a = list(map(list, df["PredictedCluster"].value_counts().items()))
一个选项是使用:
(df['PredictedCluster'].value_counts(ascending=False)
.reset_index()
.to_numpy())
这将对值进行计数,按这些计数进行排序(降序(,然后将结果转换为numpy.ndarray
。
如果您希望结果显示在列表中,只需将.tolist()
附加到语句末尾即可。