浅谈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) ...
随机推荐
- [原创] 为Visio添加公式编辑器工具栏按钮
前言 作为理工科的学生,在写论文时,难免会在示意图中添加一些公式来说明研究内容.常用的画图工具就是 Visio .而常用的公式编辑器就是 Mathtype .对于 Word 这种软件,Mathtype ...
- 无法将类型为“System.Xml.XmlComment”的对象强制转换为类型“System.Xml.XmlElement”
今天开发C#项目时,有一个需要读取XML的功能点.编码过程中遇到了如标题所示的异常,如下图所示: 查询官网后得知XmlComment是注释节点的类型,如下图所示: 于是得出结论,使用XmlDocume ...
- LCX使用心得
最近在搞内网渗透,碰到 端口转发&边界处理 的时候,我们就可以借助一些小工具了,这类工具有很多,这里主要说明lcx的用法. lcx是个很老的端口转发工具,而它的使用也很简单.不过想要把lcx玩 ...
- vmware配置静态ip
wmware安装后,默认是动态ip地址. 在测试环境搭建虚拟机后,都需要使用静态ip地址.但是配置固定静态ip地址后,虚拟机总是不能上网和访问网站域名. 原来问题出在配置固定ip后配置的的网关和域名解 ...
- Scrapy项目 - 源码工程 - 实现豆瓣 Top250 电影信息爬取的爬虫设计
一.项目目录结构 spiders文件夹内包含doubanSpider.py文件,对于项目的构建以及结构逻辑,详见环境搭建篇. 二.项目源码 1.doubanSpider.py # -*- coding ...
- axios对put操作对Android的支持之坑
### 前段时间我做的一个手机端H5项目,需要发送一个put请求.因为ajax现在用的人有点少了,而且公司里边都是用的axios,所以我也是用的是axios做的请求. ### 再开发的时候测试都没有问 ...
- golang grpc 详解
https://segmentfault.com/a/1190000007880647
- [动态规划]高数Umaru系列(9)——哈士奇(背包问题)
高数Umaru系列(9)——哈士奇 http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Index/problemdetail/pid/3358.ht ...
- springboot配置ehcache2.X缓存(@Cacheable等注解和手动操作缓存的工具类 支持element粒度的时间设置)
本文只写出一些注意事项和源码,请善用官方文档~ 注解实现 @Cacheable @CachePut @CacheEvit 启动类上加@EnableCaching就可以开启缓存 由文档可知,自动检测缓存 ...
- springboot+thymeleaf国际化方法一:LocaleResolver
springboot中大部分有默认配置所以开发起项目来非常迅速,仅对需求项做单独配置覆盖即可 spring采用的默认区域解析器是AcceptHeaderLocaleResolver,根据request ...