使用 K 表示根据人们对领导者的评分将他们映射到一个组

Using K means to map people to a group based on their score of a leader

我正在尝试创建一种算法来将人们与团队的领导者相匹配。我发现 K 表示聚类,并认为这是可行的方法。该项目在 javascript 中,所以我在 a package 上找到了实现 K-means 的 npm。现在我很困惑,因为我找不到任何与此类似的例子,但是如果我有 20 个人根据他们的领导能力给 4 个人打分,我该如何格式化我的数据以供 k-意思是把这20个人分到组里?

A screenshot google sheets of my data

准确地说:根据该屏幕截图我试图根据领导者的分数将追随者 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 个聚类。然后它将获取第一次迭代后形成的每个簇的 MEAN 值,以定义下一次迭代的质心。由于第一次迭代取任意点,得到的结果是显而易见的。

将预期的领导者定义为质心而不是让算法获得任意点作为质心可能会有所帮助。

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

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