K-Means要点:

    1)对于K-Means算法,首先要注意的是k值的选择,一般来说,我们会根据对数据的先验经验选择一个合适的k值,如果没有什么先验知识,则可以通过交叉验证选择一个合适的k值。

    2)在确定了k的个数后,我们需要选择k个初始化的质心,就像上图b中的随机质心。由于我们是启发式方法,k个初始化的质心的位置选择对最后的聚类结果和运行时间都有很大的影响,因此需要选择合适的k个质心,最好这些质心不能太近。

  •     输入是样本集,聚类的簇树k,最大迭代次数N
  •     输出是簇划分 

步骤 :

    1) 从数据集D中随机选择k个样本作为初始的k个质心向量:

    2)对于n=1,2,...,N

      a) 将簇划分C初始化为

      b) 对于i=1,2...m,计算样本和各个质心向量的距离:,将标记最小的为所对应的类别。此时更新

      c) 对于j=1,2,...,k,对中所有的样本点重新计算新的质心

      e) 如果所有的k个质心向量都没有发生变化,则转到步骤3)

    3) 输出簇划分

K-Means初始化优化K-Means++

    k个初始化的质心的位置选择对最后的聚类结果和运行时间都有很大的影响,因此需要选择合适的k个质心。如果仅仅是完全随机的选择,有可能导致算法收敛很慢。K-Means++算法就是对K-Means随机初始化质心的方法的优化。

    K-Means++的对于初始化质心的优化策略也很简单,如下:

    a)  从输入的数据点集合中随机选择一个点作为第一个聚类中心
    b) 对于数据集中的每一个点,计算它与已选择的聚类中心中最近聚类中心的距离
    c) 选择一个新的数据点作为新的聚类中心,选择的原则是:较大的点,被选取作为聚类中心的概率较大
    d) 重复b和c直到选择出k个聚类质心
    e) 利用这k个质心来作为初始化质心去运行标准的K-Means算法

K-Means距离计算优化elkan K-Means

    在传统的K-Means算法中,我们在每轮迭代时,要计算所有的样本点到所有的质心的距离,这样会比较的耗时。那么,对于距离的计算有没有能够简化的地方呢?elkan K-Means算法就是从这块入手加以改进。它的目标是减少不必要的距离的计算。那么哪些距离不需要计算呢?

    elkan K-Means利用了两边之和大于等于第三边,以及两边之差小于第三边的三角形性质,来减少距离的计算。

    第一种规律是对于一个样本点和两个质心。如果我们预先计算出了这两个质心之间的距离,则如果计算发现,我们立即就可以知道。此时我们不需要再计算,也就是说省了一步距离计算。

    第二种规律是对于一个样本点和两个质心。我们可以得到。这个从三角形的性质也很容易得到。

    利用上边的两个规律,elkan K-Means比起传统的K-Means迭代速度有很大的提高。但是如果我们的样本的特征是稀疏的,有缺失值的话,这个方法就不使用了,此时某些距离无法计算,则不能使用该算法。

大样本优化Mini Batch K-Means

    在统的K-Means算法中,要计算所有的样本点到所有的质心的距离。如果样本量非常大,比如达到10万以上,特征有100以上,此时用传统的K-Means算法非常的耗时,就算加上elkan K-Means优化也依旧。在大数据时代,这样的场景越来越多。此时Mini Batch K-Means应运而生。

    顾名思义,Mini Batch,也就是用样本集中的一部分的样本来做传统的K-Means,这样可以避免样本量太大时的计算难题,算法收敛速度大大加快。当然此时的代价就是我们的聚类的精确度也会有一些降低。一般来说这个降低的幅度在可以接受的范围之内。

    在Mini Batch K-Means中,我们会选择一个合适的批样本大小batch size,我们仅仅用batch size个样本来做K-Means聚类。那么这batch size个样本怎么来的?一般是通过无放回的随机采样得到的。

    为了增加算法的准确性,我们一般会多跑几次Mini Batch K-Means算法,用得到不同的随机采样集来得到聚类簇,选择其中最优的聚类簇。

K-Means与KNN

  1.     K-Means是无监督学习的聚类算法,没有样本输出;而KNN是监督学习的分类算法,有对应的类别输出。KNN基本不需要训练,对测试集里面的点,只需要找到在训练集中最近的k个点,用这最近的k个点的类别来决定测试点的类别。而K-Means则有明显的训练过程,找到k个类别的最佳质心,从而决定样本的簇类别。
  2.     当然,两者也有一些相似点,两个算法都包含一个过程,即找出和某一个点最近的点。两者都利用了最近邻(nearest neighbors)的思想。

K-Means小结

    K-Means是个简单实用的聚类算法,这里对K-Means的优缺点做一个总结。

    K-Means点:

    1)原理比较简单,实现也是很容易,收敛速度快。

    2)聚类效果较优。

    3)算法的可解释度比较强。

    4)主要需要调参的参数仅仅是簇数k。

    K-Means缺点:

    1)K值的选取不好把握(改进:可以通过在一开始给定一个适合的数值给k,通过一次K-means算法得到一次聚类中心。对于得到的聚类中心,根据得到的k个聚类的距离情况,合并距离最近的类,因此聚类中心数减小,当将其用于下次聚类时,相应的聚类数目也减小了,最终得到合适数目的聚类数。可以通过一个评判值E来确定聚类数得到一个合适的位置停下来,而不继续合并聚类中心。重复上述循环,直至评判函数收敛为止,最终得到较优聚类数的聚类结果)。

    2)对于不是凸的数据集比较难收敛(改进:基于密度的聚类算法更加适合,比如DESCAN算法)

    3)如果各隐含类别的数据不平衡,比如各隐含类别的数据量严重失衡,或者各隐含类别的方差不同,则聚类效果不佳。

    4) 采用迭代方法,得到的结果只是局部最优。

    5) 对噪音和异常点比较的敏感(改进1:离群点检测的LOF算法,通过去除离群点后再聚类,可以减少离群点和孤立点对于聚类效果的影响;改进2:改成求点的中位数,这种聚类方式即K-Mediods聚类(K中值))。

6)初始聚类中心的选择(改进1:k-means++;改进2:二分K-means,相关知识详见这里和这里)。

kmeans-聚类,优缺点相关推荐

  1. K-Means聚类算法思想及实现

    K-Means聚类概念: K-Means聚类是最常用的聚类算法,最初起源于信号处理,其目标是将数据点划分为K个类簇, 找到每个簇的中心并使其度量最小化. 该算法的最大优点是简单.便于理解,运算速度较快 ...

  2. (十六)K-Means聚类

    分类与聚类 一.分类 分类其实是从特定的数据中挖掘模式,作出判断的过程. 分类学习主要过程: (1)训练数据集存在一个类标记号,判断它是正向数据集(起积极作用,不垃圾邮件), 还是负向数据集(起抑制作 ...

  3. Kmeans聚类定义、KMeans聚类的步骤、Kmeans聚类常见问题及改进、Kmeans聚类的变形、Kmeans聚类的优缺点

    Kmeans聚类定义.KMeans聚类的步骤.Kmeans聚类常见问题及改进.Kmeans聚类的变形.Kmeans聚类的优缺点 目录

  4. K-Means聚类算法 — 算法原理、质心计算、距离度量、聚类效果评价及优缺点

    分类知识   分类是根据样本某些属性或某类特征(可以融合多类特征),把样本类型归为已确定的某一类别中.机器学习中常见的分类算法有:SVM(支持向量机).KNN(最邻近法).Decision Tree( ...

  5. K-means聚类原理实现 优缺点 轮廓系数 调优Canopy算法

    Kmeans聚类是我最早接触的,也是最简单的机器学习聚类算法了.它是一种无监督学习算法. 原理: 还是先简单过一下Kmeans聚类的过程吧.不像模像样地罗列个一二三四,直接口述一下过程就好:比如我们要 ...

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

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

  7. 【数据挖掘】数据挖掘总结 ( K-Means 聚类算法 | 二维数据的 K-Means 聚类 ) ★

    文章目录 一. K-Means 聚类算法流程 二. 二维数据的 K-Means 聚类 1. 第一次迭代 2. 第二次迭代 参考博客 : [数据挖掘]聚类算法 简介 ( 基于划分的聚类方法 | 基于层次 ...

  8. 【数据挖掘】K-Means 二维数据聚类分析 ( K-Means 迭代总结 | K-Means 初始中心点选择方案 | K-Means 算法优缺点 | K-Means 算法变种 )

    文章目录 K-Means 二维数据 聚类分析 数据样本及聚类要求 二维数据曼哈顿距离计算 K-Means 算法 步骤 第一次迭代 : 步骤 ( 1 ) 中心点初始化 第一次迭代 : 步骤 ( 2 ) ...

  9. 4.K-MEANS聚类算法

    4.K-MEANS聚类算法 4.1.概述 4.2.算法核心思想 4.3.K-Means原理初探 4.4.传统K-Means算法流程 4.5.K-Means初始化优化K-Means++ 4.7.大样本优 ...

  10. 一步步教你轻松学K-means聚类算法

    一步步教你轻松学K-means聚类算法 (白宁超   2018年9月13日09:10:33) 导读:k-均值算法(英文:k-means clustering),属于比较常用的算法之一,文本首先介绍聚类 ...

最新文章

  1. wpf BackgroundWorker 的简单用法
  2. Debian update apache error AH00111: Config vairable ${APACHE_RUN_DIR} is not defined
  3. OPCServer Modbus使用和配置
  4. 强烈推荐!商汤-港中文MMLab开源图像视频超分辨率工具箱MMSR
  5. sqldiag 工具
  6. python视频免费百度云-Python开发视频百度云分享
  7. NYOJ105 - 九的余数
  8. [改善Java代码]使用静态内部类提高封装性
  9. C语言2019软件,c语言模拟编程学习软件v2019 最新版
  10. 湖南省中职学业水平考试复习试题(计算机三)
  11. 如何成为一名Go开发人员:总共分六步
  12. 令牌环访问控制的原理_通过Keycloak进行访问控制的级别,第1部分:令牌认证
  13. BlackBerry 9850 应用:CISCO WebEx会议
  14. c语言中 241错误式什么意思,Qt error: stray '\241' in program
  15. preHandle执行多次问题
  16. 两万元的计算机什么配置,两万高配置电脑使用CAD非常卡顿怎么办
  17. 使用安卓模拟器和GPA截帧分析手游
  18. windows下,Anaconda安装GPU版本的tensorflow
  19. c语言作业做出金山打字功能,C语言小游戏之金山打字
  20. Unity半透明特效原理讲解(为什么半透明设置渲染顺序和深度写入这么重要)

热门文章

  1. Python编程:从入门到实践+爬虫开发与项目实战+网络编程基础+项目开发实战
  2. 使用husky配置git代码提交规范
  3. 易查分显示教师编号不正确
  4. python输出元组中的元素_python 列表(list)元组(tuple)字典(dict)如何打印中文总结...
  5. Python-数据的多种存储形式
  6. java实训感想6000字_JAVA论文6000字:无线校园
  7. OpenCV—画直角边的直线(粗线)
  8. 基于单片机的显示系统
  9. 活动预告:BetaEX线上春季发布会 | TokenInsight
  10. 计算机网络之:网段与IP地址