我正在运行k均值算法(k=5)来对数据进行聚类.为了检查算法的稳定性,我首先在整个数据集上运行该算法一次,然后在2/3的数据集上运行该算法多次(使用不同的随机状态进行拆分)。我使用这些结果来预测剩下的1/3数据的聚类。最后,我希望将预测的集群与我在整个数据集上运行k均值时得到的集群进行比较。这就是我被困的地方。
因为k-的意思是总是给(或多或少)相同的集群分配不同的标签,所以我不能仅仅比较它们。我尝试使用.value_counts()根据标签的频率将标签重新分配到0到4。但是因为我多次运行这个检查,所以我需要在循环中工作的东西。
基本上,当我使用.value_counts()时,我得到了这样的信息:
PredictedCluster
4 55555
0 44444
2 33333
1 22222
3 11111我希望我能把它转换成一个数组,在这个数组中标签是按大小排序的:
a = [[4, 55555],[0,44444],...,[3,11111]]有人能告诉我怎么做吗?或者我能用什么其他方法来解决我的问题?
发布于 2020-11-18 11:33:28
下面的一条线可能会起作用:
a = list(map(list, df["PredictedCluster"].value_counts().items()))发布于 2020-11-18 12:51:14
一种选择是使用:
(df['PredictedCluster'].value_counts(ascending=False)
.reset_index()
.to_numpy())这将计数值,按这些计数排序(降序),然后将结果转换为numpy.ndarray。
如果您希望列表中的结果,只需将.tolist()追加到语句的末尾即可。
https://stackoverflow.com/questions/64892135
复制相似问题