浅谈K-means聚类算法
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 第一次划分数据
|
所有数据 |
距16距离 |
距22距离 |
门派1(16) |
门派2(22) |
|
15 |
1 |
7 |
16 |
22 |
|
15 |
1 |
7 |
15 |
20 |
|
16 |
0 |
6 |
15 |
28 |
|
19 |
3 |
3 |
19 |
35 |
|
19 |
3 |
3 |
19 |
40 |
|
20 |
4 |
2 |
||
|
22 |
6 |
0 |
||
|
28 |
12 |
6 |
||
|
35 |
19 |
13 |
||
|
40 |
24 |
18 |
(3)分别计算两个门派的均值,把均值推选为新的大哥(新质心)。门派1的均值为16.8,门派2的均值为29.我们以新大哥代替老大哥,并重复之前的操作计算每一个小弟与新大哥的距离,再次划分门派。
表2 第二次划分数据
|
所有数据 |
距16.8距离 |
距29距离 |
门派1(16.8) |
门派2(29) |
|
15 |
1.8 |
14 |
15 |
28 |
|
15 |
1.8 |
14 |
15 |
35 |
|
16 |
0.8 |
13 |
16 |
40 |
|
19 |
2.2 |
10 |
19 |
|
|
19 |
2.2 |
10 |
19 |
|
|
20 |
3.2 |
9 |
20 |
|
|
22 |
5.2 |
7 |
22 |
|
|
28 |
11.2 |
1 |
||
|
35 |
18.2 |
6 |
||
|
40 |
23.2 |
11 |
(4)此时门派1均值18,门派2均值34.33,推举为新大哥,重复划分门派。
表3 第三次划分数据
|
所有数据 |
距18距离 |
距34.33距离 |
门派1(18) |
门派2(34.33) |
|
15 |
3 |
19.33 |
15 |
28 |
|
15 |
3 |
19.33 |
15 |
35 |
|
16 |
2 |
18.33 |
16 |
40 |
|
19 |
1 |
18.33 |
19 |
|
|
19 |
1 |
18.33 |
19 |
|
|
20 |
2 |
14.33 |
20 |
|
|
22 |
4 |
12.33 |
22 |
|
|
28 |
10 |
6.33 |
||
|
35 |
17 |
0.67 |
||
|
40 |
22 |
5.67 |
(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基础架构技术组件(如网络,存储或数据库)会生成大量的警报信息。由于警报信息可以指向具体的操作,因此必须对警报信息进行手动筛选,确保后续过程的优先级。对数据进行聚类可以对警报类别和平均修复时间做深入了解,有助于对未来故障进行预测。
浅谈K-means聚类算法的更多相关文章
- k均值聚类算法原理和(TensorFlow)实现
顾名思义,k均值聚类是一种对数据进行聚类的技术,即将数据分割成指定数量的几个类,揭示数据的内在性质及规律. 我们知道,在机器学习中,有三种不同的学习模式:监督学习.无监督学习和强化学习: 监督学习,也 ...
- K均值聚类算法
k均值聚类算法(k-means clustering algorithm)是一种迭代求解的聚类分析算法,其步骤是随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个 ...
- 机器学习实战---K均值聚类算法
一:一般K均值聚类算法实现 (一)导入数据 import numpy as np import matplotlib.pyplot as plt def loadDataSet(filename): ...
- 基于改进人工蜂群算法的K均值聚类算法(附MATLAB版源代码)
其实一直以来也没有准备在园子里发这样的文章,相对来说,算法改进放在园子里还是会稍稍显得格格不入.但是最近邮箱收到的几封邮件让我觉得有必要通过我的博客把过去做过的东西分享出去更给更多需要的人.从论文刊登 ...
- K均值聚类算法的MATLAB实现
1.K-均值聚类法的概述 之前在参加数学建模的过程中用到过这种聚类方法,但是当时只是简单知道了在matlab中如何调用工具箱进行聚类,并不是特别清楚它的原理.最近因为在学模式识别,又重新接触了这 ...
- [随机化算法] 听天由命?浅谈Simulate Anneal模拟退火算法
Simulate Anneal模拟退火算法,是一种用于得到最优解的随机化算法. 如果可以打一手漂亮的随机化搜索,也许当你面对一筹莫展的神仙题时就有一把趁手的兵器了. 这篇题解将教你什么?SA的基本思路 ...
- 浅谈k短路算法
An Old but Classic Problem 给定一个$n$个点,$m$条边的带正权有向图.给定$s$和$t$,询问$s$到$t$的所有权和为正路径中,第$k$短的长度. Notice 定义两 ...
- 大数质因解:浅谈Miller-Rabin和Pollard-Rho算法
2017-07-19 08:54 Amphetamine:能发一下代码吗? 应我那位谜一样好友的邀约,我打算好好看一看Miller-Rabin和Pollard-Rho算法.很奇怪,各种地方有很多代码描 ...
- 浅谈Java数据结构和算法
今天的突然看集合底层的时候发现了好多算法和数据结构.再次就比较一下和汇总一下. 数据结构分类:线性结构和非线性结构 问题一: 什么是线性和非线性: 我个人的理解是:数据结构中线性结构指的是数据元素之间 ...
- 聚类之K均值聚类和EM算法
这篇博客整理K均值聚类的内容,包括: 1.K均值聚类的原理: 2.初始类中心的选择和类别数K的确定: 3.K均值聚类和EM算法.高斯混合模型的关系. 一.K均值聚类的原理 K均值聚类(K-means) ...
随机推荐
- 让Samba支持Windows10的自动发现
Windows10如果开了SMB 1.0支持,就非常不安全,不开就搜索不到samba的NETBIOS. 在安装配置好samba,并且确认windows可以通过netbios名访问后. 可以使用http ...
- 采用WPF技术,开发OFD电子文档阅读器
前言 OFD是国家标准版式文档格式,于2016年生效.OFD文档国家标准参见<电子文件存储与交换格式版式文档>.既然是国家标准,OFD随后肯定会首先在政务系统使用,并逐步推向社会各个方面. ...
- 暑期——第五周总结(Web连接hbase数据库)
所花时间:7天 代码行:1000(python)+250(java) 博客量:1篇 了解到知识点 : 在尝试使用hbase当作数据库时,林子雨老师教程中有完整代码关于使用hbase,我就像当然认为只需 ...
- 在Docker中启动Cloudera
写在前面 记录一下,一个简单的cloudera处理平台的构建过程和一些基本组件的使用 前置说明 需要一台安装有Docker的机器 docker常用命令: docker ps docker ps -a ...
- springboot系列之02-需要了解的宏观知识点
未经允许,不得转载 原作者:字母哥博客 本文完整系列出自:springboot深入浅出系列 一.Spring Boot . Spring MVC .Spring对比 首先你需要明白一件事情:Sprin ...
- Linux 删除命令rm
Linux rm命令用于删除一个文件或者目录. 语法:rm [options] name... 参数: 1.-i 删除前逐一询问确认. 2.-f 即使原档案属性设为唯读,亦直接删除,无需逐一确认. 3 ...
- Kubernetes 系列(八):搭建EFK日志收集系统
Kubernetes 中比较流行的日志收集解决方案是 Elasticsearch.Fluentd 和 Kibana(EFK)技术栈,也是官方现在比较推荐的一种方案. Elasticsearch 是一个 ...
- ELK 学习笔记之 Logstash之output配置
Logstash之output配置: 输出到file 配置conf: input{ file{ path => "/usr/local/logstash-5.6.1/bin/spark ...
- 后端开发实践系列之四——简单可用的CQRS编码实践
本文只讲了一件事情:软件模型中存在读模型和写模型之分,CQRS便为此而生. 20多年前,Bertrand Meyer在他的<Object-Oriented Software Constructi ...
- SpringBoot系列:Spring Boot使用模板引擎Thymeleaf
一.Java模板引擎 模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档. 在jav ...