浅谈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) ...
随机推荐
- odoo Botton标签属性详解
按钮属性 1)icon 按钮图标名,可用的按钮图标在 addons/web/static/src/img/下. 2)string 按钮的显示文字 3)type 动作执行类型.可能值是:workflow ...
- 使用git在github远程仓库中操作
在github上创建一个仓库,这一步参考廖雪峰老师的git教程,以及其他的一些准备工作略,我只记录几个重要的命令. 从其他github地址克隆项目 $ git clone git@github.com ...
- Spark Streaming 入门
概述 什么是 Spark Streaming? Spark Streaming is an extension of the core Spark API that enables scalable, ...
- impala对元数据的界面更新操作
执行 impala-shell 即能进入界面操作sql.如果在hive更新了数据之后,而在impala中却无法看到更新后的数据的话,意味着impala里元数据信息还没有刷新,此时在impala操作界面 ...
- java跬步积累
1.eclipse自动生成get/set方法快捷键 alt+shift+s +r 2.eclipse自动生成等号左边快捷键 将光标移到:号右边,然后按Ctrl+1 3.补全代码快捷键 Alt+/ 4. ...
- .net core 3.0 Signalr - 05 使用jwt将用户跟signalr关联
Signalr是以Group.Connect为核心来进行推送,比如,给某个组.某个连接来推送,但实际场景中,核心应该是某个组.某个人:然而一个人可以对应多个连接(浏览器多个tab页):本节就来介绍下自 ...
- 如何搭建基于Docker的gitlab服务器集成CI/CD实现DEVOPS(完整版)
From this lesson you will learn about 1,How to install and configure a docker based gitlab server 2, ...
- 集合查询表--Map
查询表 Map接口java提供了一组可以以键值对(key-value)的形式存储数据的数据结构,这种数据结构成为Map.我们可以把Map看成一个多行两列的表格,其中第一列存放key,第二列存放valu ...
- 前端之CSS基础及使用方法
CSS介绍 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素. 当浏览器读到一个样式表,它就会按照这个样式表来对文档进行格式化(渲染). CSS语法 CSS实例 ...
- 05-03 主成分分析(PCA)
目录 主成分分析(PCA) 一.维数灾难和降维 二.主成分分析学习目标 三.主成分分析详解 3.1 主成分分析两个条件 3.2 基于最近重构性推导PCA 3.2.1 主成分分析目标函数 3.2.2 主 ...