这是学习笔记的第 2011 篇文章
今天学习了下K-Means算法,很多语言和工具都有成型的库和方法,不过为了能够督促自己理解,还是做了一些额外的工作,自己设想了一个例子,假设有10名员工,我们根据他们的技术能力和沟通能力来评估一下他们的综合能力,看看他们的资质,自己拼凑了一些数据情况如下:
员工 | 技术能力指数 | 沟通能力指数 |
---|---|---|
P1 | 10 | 10 |
P2 | 5 | 5 |
P3 | 7 | 5 |
P4 | 7 | 7 |
P5 | 6 | 6 |
P6 | 6 | 7 |
P7 | 6 | 5 |
P8 | 9 | 9 |
P9 | 8 | 9 |
P10 | 8 | 6 |
散点图的信息如下:
我们选择P1,P2为质心,即他们作为参照标准,分别和其他的员工数据进行比对,得到一个差异值,即两点之间的距离,可以使用欧式距离来得到,比如P1到P3的距离就是(10-7)(10-7)+(10-5)(10-5)开根号,得到的值为5.8
P2到P3的距离是(7-5)(7-5)+(5-5)(5-5) 开根号,得到的值为2
按照这种算法,得到如下的一个列表:
P1 | P2 | |
---|---|---|
P3 | 5.8 | 2 |
P4 | 4.2 | 2.8 |
P5 | 5.7 | 1.4 |
P6 | 5 | 2.2 |
P7 | 6.4 | 1 |
P8 | 1.4 | 5.7 |
P9 | 2.2 | 5 |
P10 | 4.5 | 3.1 |
从以上的数据,可以看出P1和P8,P9的距离相对最近,而P2和P3,P4,P5,P6,P7,P10的距离相对更近。
则分组的情况为:
组A: P1,P8,P9
组B: P2,P3,P4,P5,P6,P7,P10
即组A的3个员工的整体素质较高,而另外一组的水平则有待提高。
因为最开始选择P1,P2是随机的,所以计算距离得到的模型还是不够准确,我们需要基于刚才的数据重新选择质心,这里我们可以使用每组的平均值来计算。
选出新的代表(质心),这里是各个组的平均值,即:
组A: (10+9+8)/3, (10+9+9)/3 约为(9,9)
组B: (5+7+7+6+6+6+9)/7, (5+5+7+6+7+5+6)/7 约为(6,5)
这里的两个质心如果精确到小数点后是没有匹配的员工的,所以在这里可以理解是虚拟的。
我们以两个计算后的新的节点作为参考,计算后得到的结果如下:
P1_new | P2_new | |
---|---|---|
P1 | 1.4 | 6.4 |
P2 | 5.7 | 1 |
P3 | 4.5 | 1 |
P4 | 2.8 | 2.2 |
P5 | 4.2 | 1 |
P6 | 3.6 | 2 |
P7 | 5 | 0 |
P8 | 0 | 5 |
P9 | 1 | 4.5 |
P10 | 3.1 | 2.2 |
所以重新分组后的结果为:
组A: P1,P8,P9
组B: P2,P3,P4,P5,P6,P7,P10
这次的结果和上次没有任何变化了,说明已经收敛,聚类结束,聚类结果和我们最开始设想的结果完全一致
当然这只是一个初步的测试和练习,里面的所有计算都是口算然后翘着计算器完成的。
如果要分析的更实用一些,应该引入更多的维度,同时对于数据的分类可以做一下扩充来看。