K-means算法的起源
1967年,James MacQueen在他的论文《用于多变量观测分类和分析的一些方法》中首次提出 “K-means”这一术语。1957年,贝尔实验室也将标准算法用于脉冲编码调制技术。1965年,E.W. Forgy发表了本质上相同的算法——Lloyd-Forgy算法,所以这一算法有时也被称为Lloyd-Forgy算法。更高效的版本则被Hartigan and Wong提出。
K-means算法的原理
K-Means聚类算法是聚类算法之一,其中K表示类别的数量,也就是说,我们想要将数据分成几个类别,Means表示均值。K值决定了初始质心(通常是随机选择的中心)的数量。K值是几,必须有几个质心。 简而言之,K-Means聚类算法是一种通过均值聚类数据点的算法。
K-means算法的过程
1、首先输入K的值,将数据集分为K个类别。
2、从这组数据中随机选择K个数据点作为初始大哥(初始质心),其它数据点都作为小弟。
3、对数据集中每一个小弟,计算与每一个大哥的距离,离哪个大哥距离最近,就分配给哪个大哥。
4、每一个大哥手下都聚集了一帮小弟,这时候召开黑帮会议,推选出新的大哥(新的质心)。
5、如果新大哥和老大哥之间的距离很小或为0,说明新任大哥靠谱,选举结束(可以认为我们进行的聚类已经达到期望的结果,算法终止)。
6、如果新大哥和老大哥之间的距离很大,需要重新选举新大哥,分配小弟(重复3~5的步骤)。
K-means算法的例子
【例】以下是一组用户的年龄数据,使用K-means算法划分数据。
15,15,16,19,19,20,22,28,35,40
【步骤】
(1)我们将K值定为2,并随机选择16和22作为初始大哥。
(2)分别计算每一个小弟与初始大哥的距离,划分门派,距离相同的随机划分。
表1 第一次划分数据
(3)分别计算两个门派的均值,把均值推选为新的大哥(新质心)。门派1的均值为16.8,门派2的均值为29.我们以新大哥代替老大哥,并重复之前的操作计算每一个小弟与新大哥的距离,再次划分门派。
表2 第二次划分数据
(4)此时门派1均值18,门派2均值34.33,推举为新大哥,重复划分门派。
表3 第三次划分数据
(5)计算门派1均值为18,门派2均值为34.33,推举为新大哥,此时新大哥和老大哥距离为0,选举结束。
年龄数据被划分为两类,如上图所示,15--22为一类,28--40为一类。
K-means算法的有趣用例
1.文档分类器
根据标签、主题和文档内容将文档分为多个不同的种类。这是一个非常标准且经典的K-means算法分类问题。首先需要对文档进行初始化处理,将每个文档都用矢量来表示,并使用术语频率来识别常用术语进行文档分类,这一步很有必要。然后对文档向量进行聚类以识别文档组中的相似性。
2.物品传输优化
使用K-means算法的组合找到无人机最佳发射位置和使用遗传算法来解决旅行商的行车路线问题,优化无人机物品传输过程。
3.识别犯罪地点
使用城市中特定地区的相关犯罪数据,分析犯罪类型、犯罪地点以及两者之间的联系,可以对城市中容易犯罪的地区做高质量的侦查。这是基于德里飞行情报区犯罪数据的论文。
4.客户分类
聚类能够帮助营销人员改善他们的客户群(在其目标区域内工作),并根据客户的购买历史、兴趣或活动监控来对客户类别做进一步的细分。这是关于电信运营商如何将预付费客户分为充值模式、发送短信和浏览网站几个类别的白皮书。对客户进行分类有助于公司针对特定客户群制定特定的广告。
5.球队状态分析
分析球员的状态一直都是体育界的一个重点。随着竞争越来越激烈,机器学习在这个领域也扮演着至关重要的角色。要是你想创建一个优秀的球队并且喜欢根据球员的状态来识别类似的球员,那么K-means算法是一个很好的选择。
6.保险欺诈检测
机器学习在汽车、医疗保险和保险欺诈检测领域中应用广泛。利用以往欺诈性索赔的历史数据,根据它和欺诈性模式聚类的相似性来识别新的索赔。由于保险欺诈可能会对公司造成数百万美元的损失,因此欺诈检测对公司来说至关重要。这是汽车保险中使用聚类来检测欺诈的白皮书。
7.乘车数据分析
面向大众公开的Uber乘车信息的数据集,为我们提供了大量关于交通、运输时间、高峰乘车地点等有价值的数据集。分析这些数据不仅对Uber大有好处,而且有助于我们对城市的交通模式进行深入的了解,来帮助我们做城市未来规划。
8.网络分析犯罪分子
网络分析是从个人和团体中收集数据来识别二者之间的重要关系的过程。网络分析源自于犯罪档案,该档案提供了调查部门的信息,由此对犯罪现场的罪犯进行分类。
9.呼叫记录详细分析
呼叫详细记录(CDR)是电信公司收集的关于用户呼叫,短消息和网络活动等信息的集合。将通话详细记录与客户个人资料结合在一起,这就能帮助电信公司对客户需求做更多的预测。
10.IT警报的自动化聚类
大型企业IT基础架构技术组件(如网络,存储或数据库)会生成大量的警报信息。由于警报信息可以指向具体的操作,因此必须对警报信息进行手动筛选,确保后续过程的优先级。对数据进行聚类可以对警报类别和平均修复时间做深入了解,有助于对未来故障进行预测。