| 
 
	积分10778贡献 精华在线时间 小时注册时间2014-7-28最后登录1970-1-1 
 | 
 
 发表于 2022-5-12 10:03:53
|
显示全部楼层 
| 本帖最后由 付亚男 于 2022-5-12 10:07 编辑 
 random_state和你聚类的数目没有关系,聚类的数目是你人为确定的,k-means在每一次聚类过程中都会重复n_init次,轮廓系数用来确定这n_init次中的最佳结果。
 
 
 k-means算法的基本逻辑是这样的:
 step1:你人为给定一个n_cluster,然后算法会随机将你要聚类的样本分为n_cluster组,求每一组的centroid,一共得到n_cluster个centroid。这里用到了random_state。
 step2:计算所有样本和这n_cluster个centroid之间的欧氏距离或者相关系数,然后将样本漂移到距离最近的那一类,然后重新计算centroid。例如,样本 x 在上一步被随机分到了第 i 类,但是经过计算,发现它和第 j 类的更接近,就把 x 漂移到第 j 类。
 step3:不断重复step2,直到没有任何样本会漂移为止。
 step4:由于上述结果具有随机性,所以算法会把上述整个过程重复n_init次,这个n_init的缺省值在 sklearn.cluster 中为10,10次计算之后,算法会对这10次的结果取一个最佳,这个最佳的标准,就是轮廓系数。
 
 
 在实际应用中,随机数不同,的确会得到不同的结果,但是根据我个人的经验,这个结果差异很小,并且假如你给一个很大的n_init,比如给定100,结果之间可能就没有差异了。不过很可能对于同样的某一类,两次聚类之间的编号可能会不同。比如你聚类数目为3,可能第一次聚类结果中,某个类的编号为2,到第二次聚类中,这个类的编号会变成0,但是类中的样本是不变的,只是编号出现了变化。你给出一个确定的random_state,就不会出现这种情况了。
 
 | 
 |