目录

一、Kmeans

二、Kmeans的流程

三、距离度量方式

3.1、闵可夫斯基距离

3.2、马哈拉诺比斯距离

3.3、其他

四、Kmeans聚类实例

五、Kmeans存在的问题

5.1、初始点的选择

5.2、K值的选择

5.3、大数据量的聚类

5.4、非球形数据

六、解决办法

6.1、代价函数

6.2、肘部法则

6.3、min-batch Kmeans

6.4、DBSCAN


一、Kmeans

聚类是针对给定的样本,依据他们特征的相似度或者距离,将其归并到若干个“类”或“簇”的数据分析问题。聚类属于无监督学习算法,它的分类依据是样本的相似度或距离,而类或簇的类别事先并不知道,也就是说样本并没有标签。

常见的聚类算法包括Kmeans、层次聚类和DBSCAN,本篇主要介绍K均值聚类。

Kmeans是基于样本集合划分的聚类算法。Kmeans将样本集合划分为k个子集,构成K个子类,每个子类有一个聚类中心,按照一定的度量规则,将每个样本归为其距离最近的聚类中心所在的类。每个样本距离最近的聚类中心只能有一个,所以每个样本也只有一个分类,所以Kmeans属于硬聚类。

二、Kmeans的流程

该算法的流程非常简单,就是不断地迭代,向着同一类的所有样本离该类的聚类中心距离之和最小的方向去调整聚类中心的位置和所有样本点的归属,直到找到最佳的K个聚类中心并且所有样本已找到最佳归属。

算法的流程为:

(1)初始化:随机的选择K个样本点作为K个初始的聚类中心。

(2)对样本进行聚类:计算每个样本到每个剧烈中心的距离,将每个样本归类到与其相聚最近发聚类中心所在的类中。

(3)计算新的聚类中心:计算每个类中所有样本的均值作为新的聚类中心。

(4)如果聚类中心不在发生改变或者到达截至条件就停止迭代,否则重复(2)和(3)。

Kmeans的计算复杂度为O(mnk),m为样本维度,n为样本个数,k为类别数。

三、距离度量方式

3.1、闵可夫斯基距离

闵可夫斯基距离越大,样本之间的相似度就越小,闵可夫斯基距离越小,样本之间相似度就越大。当其值为0代表两者为同一个样本。x=(x1,x2,...,xn),y=(y1,y2,...yn,)定义两者之间的闵可夫斯基距离d为:

其中p大于等于1,p=1时,称为曼哈顿距离,p=2时称为欧几里得距离,简称欧氏距离,当p为无穷大时称为切比雪夫距离,此时距离为各个坐标数值差的绝对值的最大值 。

如下图,图中绿线代表x1与x2之间的欧氏距离,红线代表两者之间的曼哈顿距离。

3.2、马哈拉诺比斯距离

马哈拉诺比斯距离,简称马氏距离,它考虑各个分量之间的相关性并与各个分量的尺度无关。

给定一个样本集合,其协方差矩阵记作S,则样本xi与xj之间的马氏距离为:

可以看出,当S为单位矩阵时,即数据样本的各个分量相互独立且各个分量的方差为1是,马氏距离退化为欧氏距离,所以马氏距离是欧氏距离的推广,它弥补了欧氏距离将不同属性平等对待的缺点。

3.3、其他

其他常用的距离度量方式还有像相关系数、夹角余弦等,两者均可以表示样本的相似度。相关系数的绝对值为0到1之间,越接近1相似度就越大,接近1为正相关,接近-1为负相关。夹角余弦越接近1表示越相似,越接近0表示越不相似。

四、Kmeans聚类实例

给定一个样本集合X={x1=(0,2)、x2=(0,0)、x3=(1,0)、x4=(5,0)、x5=(5,2)},将其聚为两类。

首先随机取两个点作为聚类中心,这里可以在数据范围内随机生成,也可以直接取两个样本点作为聚类中心。这里我们取m1=x1=(0,2),m2=x2=(0,0)分别作为类G1和G2的聚类中心。那么x1属于G1类,x2属于G2类,接下来计算其他点欧式距离的平方(比较大小用平方即可,不影响结果且易于计算):

对于x3:d(x3,m1)=5,d(x3,m2)=1,故x3分到类G2中;

对于x4:d(x4,m1)=29,d(x4,m2)=25,故x4分到类G1中;

对于x5:d(x5,m1)=25,d(x5,m2)=29,故x5分到类G1中;

此时:G1={x1,x5},G2=(x2,x3,x4),重新计算样本中心:m1=((0+5)/2,(2+2)/2)=(2.5,2);m2=((0+1+5)/3,(0+0+0)/3)=(2,0).

重新计算距离后,可得:G1={x1,x5},G2={x2,x3,x4}.由于分类结果并没有改变,所以聚类停止,此时为最终结果。

五、Kmeans存在的问题

5.1、初始点的选择

对于不同的初始点,可能会导致不同的聚类结果,当聚类陷入局部最优时,聚类结果就不如人意。如下图所示,左图为比较合理的聚类,右图就是陷入局部最优的聚类。

5.2、K值的选择

K的选择对最终结果由很大的影响,K值过大会导致聚类过于稀疏,把本应属于一类的数据分成多类,可能会失去数据之间的相关信息;K值过小会导致聚类过于稠密,无法区分不同类别。

5.3、大数据量的聚类

当数据量较大时,由于每次都需要计算距离并比较,复杂度为O(mnk),会导致开销无法接受。

5.4、非球形数据

Kmeans在处理非球形数据时表现的不尽如人意。如下图的笑脸数据,我们希望按照两个眼睛、嘴巴和轮廓将其分成四类,而按照Kmeans分法,只能得到如下结果。

这里给大家推荐个Kmeans可视化的网站:Kmeans可视化

六、解决办法

6.1、代价函数

对于5.1的问题,由于产生的原因是初始化的聚类中心不合理,所以解决办法是多次执行聚类流程,每次迭代完成后计算本次剧烈的代价函数,然后重新初始化并走完整套流程,计算代价函数,多次重复后选择代价函数最小的作为最终结果。

代价函数的定义为:

其中xi属于的类别为mk。这样多次计算,选择代价函数最小的一个,就可以避免陷入局部最优。

6.2、肘部法则

对于5.2的问题,我们可以使K值从小到大递增,分别计算不同K值的损失,画出图像,选择肘部的K值作为最终选择,如图所示,最终选择K=4.

6.3、min-batch Kmeans

对于5.3的问题,min-batch Kmeans是指选择部分数据进行聚类,根据选出的数据找出剧烈中心,然后将聚类中心作为所有样本数据的聚类中心,这样可以减少计算量,从而处理大规模数据。

研究表明,min-batch Kmeans可以大规模减少计算时间,但结果只是略差于全数据量的Kmeans。

6.4、DBSCAN

对于5.4的问题,采用欧氏距离度量的方式已不再合适,要采用密度度量方式,这样可以把5.4的数据聚类成我们想要的。具体算法我们后续再讨论。

机器学习之聚类算法:K均值聚类(一、算法原理)相关推荐

  1. 机器学习之无监督学习-K均值聚类算法

    机器学习之无监督学习-K均值聚类算法 对于无监督学习,有两类重要的应用,一个是聚类,一个是降维.我们今天主要学习聚类中的K均值聚类. 我们先看看下图,图a为原始的数据点,我们想要对图a的数据点进行分类 ...

  2. 机器学习(三)k均值聚类

    k均值聚类 原文地址:http://blog.csdn.net/hjimce/article/details/45200985 作者:hjimce 高斯混合模型和k均值聚类是聚类算法中的两种比较常用而 ...

  3. python机器学习案例系列教程——k均值聚类、k中心点聚类

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 上一篇我们学习了层次聚类.层次聚类只是迭代的把最相近的两个聚类匹配起来.并没有给出能给出多少的分组.今天我们来研究一个K均值聚类.就是 ...

  4. 聚类之K均值聚类和EM算法

    这篇博客整理K均值聚类的内容,包括: 1.K均值聚类的原理: 2.初始类中心的选择和类别数K的确定: 3.K均值聚类和EM算法.高斯混合模型的关系. 一.K均值聚类的原理 K均值聚类(K-means) ...

  5. 多元统计分析--聚类分析(系统性聚类、K均值聚类)

    摘要 系统聚类分为Q型聚类与R型聚类.前者对样品进行聚类,后者对变量进行聚类.在本文中,我们探讨对样品的分类. 文章目录 摘要 主要思想 相似性的度量 系统聚类 K均值聚类 主要思想 聚类,在样品没有 ...

  6. java k均值_算法——K均值聚類算法(Java實現)

    1.用途:聚類算法通常用於數據挖掘,將相似的數組進行聚簇 2.原理:網上比較多,可以百度或者google一下 3.實現:Java代碼如下 package org.algorithm; import j ...

  7. 聚类和EM算法——K均值聚类

    20211116 数据分析 | 聚类分析--kmean kmeans最优k值的确定方法-手肘法和轮廓系数法 - 简书 python大战机器学习--聚类和EM算法 注:本文中涉及到的公式一律省略(公式不 ...

  8. 两种聚类方法——K均值聚类(K-means)算法和模糊C均值聚类(FCM)算法的简述与在MATLAB中的实现

    目录 1.K-means算法 1.1算法流程 1.2程序实现 1.3实验结果 原始数据集 聚类结果 2.FCM算法 2.1算法流程 2.2程序设计 FCM子函数 主函数 2.3实验结果 原始数据集 聚 ...

  9. matlab编程实现k_means聚类(k均值聚类)

    1. 聚类的定义 以下内容摘抄自周志华<机器学习> 根据训练数据是否拥有标记信息,机器学习任务可以大致分为两大类:"监督学习"(supervised learning) ...

最新文章

  1. memcachedb 加 memcached engine无法提高 示例检索的查询速度
  2. Forefront Security For Exchange的反病毒测试
  3. 项目笔记:2017年(SSM架构)
  4. Cannot resolve de.codecentric:spring-boot-admin-starter-server:2.4.0-SNAPSHOT
  5. JVM实用参数(五)新生代垃圾回收
  6. Unity SRP自定义渲染管线 -- 4.Spotlight Shadows
  7. Java LinkedHashMap clear()方法与示例
  8. asp.net用户注销或者关闭网页时清除用户Cookie
  9. 使用CNN实现图像分类——理解卷积神经网络(卷积、池化、全连接)
  10. 监管大屏系统_“警视”警务情指一体大屏可视化决策系统
  11. HTML文字阴影荧光,小编,文章里的“发光”文字怎么做的?
  12. 电路板上的这些标志你都知道是什么含义吗?——详解电子产品认证类型
  13. mysql 加锁 索引_一条简单的更新语句,MySQL是如何加锁的?
  14. MATLAB 基础知识 数据类型 分组数组 创建分类数组
  15. 彻底解决unable to find valid certification path to requested target
  16. 促进目标实现的激励技巧
  17. Markdown文件关机没保存,怎么恢复
  18. 【Java -- Map】
  19. 及时总结工作中的经验是个人成长的关键
  20. 个人博客后台管理系统

热门文章

  1. vistor的安装与使用
  2. 【狂神说:秦疆】SpringMVC笔记
  3. deepin php7,deepin安装php7
  4. Dlink DIR-615L 和水星(mercury) MW300R桥接方法!
  5. HNU暑假程序设计训练 0419
  6. 多线程学习(四)-线程范围内共享数据
  7. 2.6 zio入门——对比Future
  8. python压缩_Python札记 -- 文件压缩
  9. 装系统需不需要格式化系统盘?别再被这些说法骗了!
  10. 数据挖掘学习路线【转知乎某人的观点】