K-Means算法原理和简单测试

作者: admin 分类: 公众号存档            0 次浏览 发布时间: 2019-06-16 23:28

公众号:杨建荣的学习笔记 · 作者:杨建荣 · 发布:2019-06-16 23:28:40 · 原文链接

这是学习笔记的第 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

这次的结果和上次没有任何变化了,说明已经收敛,聚类结束,聚类结果和我们最开始设想的结果完全一致

当然这只是一个初步的测试和练习,里面的所有计算都是口算然后翘着计算器完成的。 

如果要分析的更实用一些,应该引入更多的维度,同时对于数据的分类可以做一下扩充来看。 

admin

杨建荣,《Oracle DBA工作笔记》《MySQL DBA工作笔记》作者,dbaplus社群发起人之一,腾讯云TVP,现任竞技世界系统部经理,拥有十多年数据库开发和运维经验,目前专注于开源技术、运维自动化和性能调优

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注