前言javascript

kmeans是最简单的聚类算法之一,可是运用十分普遍。最近在工做中也常常遇到这个算法。kmeans通常在数据分析前期使用,选取适当的k,将数据分类后,而后分类研究不一样聚类下数据的特色。html

本文记录学习kmeans算法相关的内容,包括算法原理,收敛性,效果评估聚,最后带上R语言的例子,做为备忘。java

算法原理算法

kmeans的计算方法以下:shell

1 随机选取k个中心点app

2 遍历全部数据,将每一个数据划分到最近的中心点中机器学习

3 计算每一个聚类的平均值,并做为新的中心点ide

4 重复2-3,直到这k个中线点再也不变化(收敛了),或执行了足够多的迭代函数

时间复杂度:O(I*n*k*m)post

空间复杂度:O(n*m)

其中m为每一个元素字段个数,n为数据量,I为跌打个数。通常I,k,m都可认为是常量,因此时间和空间复杂度能够简化为O(n),即线性的。

算法收敛

从kmeans的算法能够发现,SSE实际上是一个严格的坐标降低(Coordinate Decendet)过程。设目标函数SSE以下:

SSE(,,…,) =

采用欧式距离做为变量之间的聚类函数。每次朝一个变量的方向找到最优解,也就是求偏倒数,而后等于0,可得

c_i= 其中m是c_i所在的簇的元素的个数

也就是当前聚类的均值就是当前方向的最优解(最小值),这与kmeans的每一次迭代过程同样。因此,这样保证SSE每一次迭代时,都会减少,最终使SSE收敛。

因为SSE是一个非凸函数(non-convex function),因此SSE不能保证找到全局最优解,只能确保局部最优解。可是能够重复执行几回kmeans,选取SSE最小的一次做为最终的聚类结果。

0-1规格化

因为数据之间量纲的不相同,不方便比较。举个例子,好比游戏用户的在线时长和活跃天数,前者单位是秒,数值通常都是几千,然后者单位是天,数值通常在个位或十位,若是用这两个变量来表征用户的活跃状况,显然活跃天数的做用基本上能够忽略。因此,须要将数据统一放到0~1的范围,将其转化为无量纲的纯数值,便于不一样单位或量级的指标可以进行比较和加权。具体计算方法以下:

其中属于A。

轮廓系数

轮廓系数(Silhouette Coefficient)结合了聚类的凝聚度(Cohesion)和分离度(Separation),用于评估聚类的效果。该值处于-1~1之间,值越大,表示聚类效果越好。具体计算方法以下:

对于第i个元素x_i,计算x_i与其同一个簇内的全部其余元素距离的平均值,记做a_i,用于量化簇内的凝聚度。

选取x_i外的一个簇b,计算x_i与b中全部点的平均距离,遍历全部其余簇,找到最近的这个平均距离,记做b_i,用于量化簇之间分离度。

对于元素x_i,轮廓系数s_i = (b_i – a_i)/max(a_i,b_i)

计算全部x的轮廓系数,求出平均值即为当前聚类的总体轮廓系数

从上面的公式,不难发现若s_i小于0,说明x_i与其簇内元素的平均距离小于最近的其余簇,表示聚类效果很差。若是a_i趋于0,或者b_i足够大,那么s_i趋近与1,说明聚类效果比较好。

K值选取

在实际应用中,因为Kmean通常做为数据预处理,或者用于辅助分类贴标签。因此k通常不会设置很大。能够经过枚举,令k从2到一个固定值如10,在每一个k值上重复运行数次kmeans(避免局部最优解),并计算当前k的平均轮廓系数,最后选取轮廓系数最大的值对应的k做为最终的集群数目。

实际应用

下面经过例子(R实现,完整代码见附件)讲解kmeans使用方法,会将上面提到的内容所有串起来

加载实验数据iris,这个数据在机器学习领域使用比较频繁,主要是经过画的几个部分的大小,对花的品种分类,实验中须要使用fpc库估计轮廓系数,若是没有能够经过install.packages安装。

对iris的4个feature作数据正规化,每一个feature均是花的某个不为的尺寸。

评估k,因为通常K不会太大,太大了也不易于理解,因此遍历K为2到8。因为kmeans具备必定随机性,并非每次都收敛到全局最小,因此针对每个k值,重复执行30次,取并计算轮廓系数,最终取平均做为最终评价标准,能够看到以下的示意图,

当k取2时,有最大的轮廓系数,虽然实际上有3个种类。

聚类完成后,有源原始数据是4纬,没法可视化,因此经过多维定标(Multidimensional scaling)将纬度将至2为,查看聚类效果,以下

能够发现原始分类中和聚类中左边那一簇的效果仍是拟合的很好的,右测原始数据就连在一块儿,kmeans没法很好的区分,须要寻求其余方法。

kmeans最佳实践

1. 随机选取训练数据中的k个点做为起始点

2. 当k值选定后,随机计算n次,取获得最小开销函数值的k做为最终聚类结果,避免随机引发的局部最优解

3. 手肘法选取k值:绘制出k--开销函数闪点图,看到有明显拐点(以下)的地方,设为k值,能够结合轮廓系数。

4. k值有时候须要根据应用场景选取,而不能彻底的依据评估参数选取。

参考

聚类轮廓系数java_轮廓系数的应用:kmeans聚类理论篇K的选择(轮廓系数)相关推荐

  1. 聚类算法实践(1)——层次、K-means聚类

    转载: http://www.itongji.cn/article/0R52D32013.html 聚类算法实践(1)--层次.K-means聚类 所谓聚类,就是将相似的事物聚集在一起,而将不相似的事 ...

  2. [转]聚类算法实践(1)—— 层次、K-means聚类

    聚类算法实践(1)--层次.K-means聚类 男人海洋 发表于 2013-08-29 14:33 来源: 数据之城 阅读:1007次 所谓聚类,就是将相似的事物聚集在一起,而将不相似的事物划分到不同 ...

  3. kmeans聚类目的干什么的_零基础学习Kmeans聚类算法的原理与实现过程

    内容导入: 聚类是无监督学习的典型例子,聚类也能为企业运营中也发挥者巨大的作用,比如我们可以利用聚类对目标用户进行群体分类,把目标群体划分成几个具有明显特征区别的细分群体,从而可以在运营活动中为这些细 ...

  4. 机器学习 之 Kmeans聚类

    Kmeans聚类 什么是Kmeans聚类 Kmeans聚类思想 Kmeans重要参数和接口 聚类小例子 n_clusters的探究 聚类结果评价指标 拐点法 轮廓系数法 单一的n_clusters聚类 ...

  5. 带约束的K-means聚类算法

    带约束的K-means 聚类算法 1. 前言 上一期学习了K-means聚类算法,聚类是不受到限制的,单纯的无监督学习,但是当存在一些约束时,比如对每一簇的聚类样本点数量有限制,或者每个样本点带需求, ...

  6. 通过聚类中心进行0-9数字语音识别(matlab)——基于K-means聚类

    项目已免费开源:https://gitee.com/zhengzsj/automatic-speech-recognition–ars/tree/master 1.技术路线 2.实现过程   层次聚类 ...

  7. k-means聚类算法从入门到精通

    k-means算法是非监督聚类最常用的一种方法,因其算法简单和很好的适用于大样本数据,广泛应用于不同领域,本文详细总结了k-means聚类算法原理 . 目录 1. k-means聚类算法原理 2. k ...

  8. ITK:KMeans聚类

    ITK:KMeans聚类 内容提要 C++实现代码 内容提要 KMeans聚类. C++实现代码 #include <itkImage.h> #include <itkImageFi ...

  9. 机器学习十大经典算法之K-Means聚类算法

    聚类介绍 聚类在机器学习,数据挖掘,模式识别,图像分析以及生物信息等领域有广泛的应用.聚类是把相似的对象通过静态分类的方法分成不同的组别或者更多的子集(subset),这样让在同一个子集中的成员对象都 ...

最新文章

  1. pyqt5入门教程(三)
  2. 引导win7+linux系统安装,win7 + ubuntu16.04LTS双系统安装(Legacy引导模式)
  3. python程序将其重复M个字符N次
  4. 使用代码创建SAP BRF ruleset
  5. Java生鲜电商平台-深入订单拆单架构与实战
  6. CSS属性之attr()
  7. block与inline,inline和inline-block,块级和行内元素,行内替换和行内非替换元素
  8. Google Earth KML格式成为开放式国际标准
  9. 信息学奥赛一本通(2051:【例3.1】偶数)
  10. Day25 与类相关的魔术方法
  11. 有人说赚钱靠项目,也有人说赚钱靠技术
  12. 12.python之pymsql模块
  13. 华为开发者学堂 | 囤课畅学 码住未来
  14. QCC302X/QCC303X蓝牙对讲与蓝牙扩音器
  15. U盘写保护不能格式化文件不能删除解决办法
  16. google license key格式不对
  17. oms系统应用服务器,OMS、WMS、TMS、ERP之间的关系
  18. Java实验实现一个circle类_Java实验报告四
  19. 常见Andriod游戏破解搜索关键字
  20. 打喷嚏 打嗝 打饱嗝 打鼾 打哈切 用日语都怎么说?

热门文章

  1. 预测杭州五一黄金周的旅游出行人数
  2. 山东大学数据库系统实验七
  3. 满二叉树先序序列转后序序列
  4. UNIX SOCKET简介
  5. UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf3 in position 4645: invalid continuation byte
  6. 产品更新!数维图编辑器超10项功能升级
  7. 2021亚马逊美国站黑五销售数据
  8. 如何使用USER.DB找回丢失QQ中的好友?
  9. 小米物联网世界第一_小米成为全球最大的智能硬件IoT平台,你知道吗?
  10. 泊松分布分析足球比赛