使用K意味着根据领导者的得分将人们映射到一个小组



我正试图创建一种算法,将人们与团队的领导者进行匹配。我发现了K的意思是集群,并认为这就是前进的方向。这个项目是用javascript编写的,所以我在npm上找到了一个实现K-means的包。现在我很困惑,因为我找不到任何类似的例子,但如果我有20个人根据他们的领导能力给4个人打分,我该如何格式化我的数据,以便k均值将20个人分组?

我的数据的谷歌表格截图

确切地说:基于该屏幕截图,我正试图将关注者2-20映射到领导者L1-L4,基于他们对领导者的得分0,0.5,1,1.5,其中1.5是最高得分(最短距离(。理想情况下拥有相似规模的团队。

我尝试过的:

var data = [[0.5,0.5,0,0],
[1.5,0,0.5,0],
[1.5,0,1.5,1],
[1.5,0.5,0,0],
[0.5,1.5,0,1],
[0.5,1.5,0.5,1],
[0.5,0.5,1,0],
[1,0,1,1],
[1.5,1.5,1,0.5],
[0.5,1,0.5,1],
[1,1,1,1],
[1.5,1.5,0.5,1],
[1,1.5,1,0.5],
[0,1.5,0.5,1.5],
[1.5,1,0.5,0],
[0.5,0,0,1.5],
[0.5,0,0,1.5],
[1.5,0.5,1.5,1],
[0.5,1.5,1,1]];
var res = skmeans(data,4);

但这只是根据谁对领导者的得分相似来将追随者分组,而不是使用领导者作为质心。对其他集群格式开放,或者如果我完全偏离目标,可以提供更好的算法信息来完成这项任务。

K-means集群在这里所做的是获得4个任意点,并计算到每个数据点的最短距离,以根据您的要求创建4个集群。然后,它将获得第一次迭代后形成的每个聚类的平均值,以定义下一次迭代的质心。由于第一次迭代取任意点,所以得到的结果是显而易见的。

将期望的引线定义为质心,而不是让算法将任意点定义为质心可能会有所帮助。

skmeans(data,k,[centroids],[iterations])

参考:https://www.npmjs.com/package/skmeans#skmeansdatakcentroidsiterations

最新更新