- 积分
- 9318
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 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,就不会出现这种情况了。
|
|