zoukankan      html  css  js  c++  java
  • 无监督学习——K-means聚类

    先用图来描述K-means怎么做的

    对于如下数据

    如果你想分成2类(k=2),算法会随机生成两个聚类中心

    然后会分别计算每个数据(绿点)与聚类中心的距离(一般是欧式距离),来决定属于哪个类(距离哪个聚类中心近)

    这样,就得到了数据的第一次分类,接下来算法会计算已分类的数据的“中心”,将它们作为新的聚类中心

    这时,重新计算所有数据(红点和蓝点)与新的聚类中心的距离,并判断属于哪个类

    然后,重新计算新的分类的聚类中心

    然后,重新计算数据点与新的聚类中心的距离,并决定属于哪个类

    然后,重新计算聚类中心

    重点:就这样重复直到“新的聚类中心”与“上一次聚类中心”的位置相同,算法中止。


    总结K-means算法

    输入:

    • K(聚类数)
    • 训练样本

    算法步骤:

    随机选择K个“初始聚类中心”(μ1, μ2,..., μK)(每个聚类中心都是n维向量)

    重复{

      for i = 1 to m

        c(i) := 距离数据x(i)最近的中心

      for k = 1 to K

        μk := 所有属于类k的数据(第一步得到)的平均值

    }

    终止条件是聚类中心不再发生变化


    K-means对于不可分数据的处理

    如果想要将衣服种类分为S, M, L三种类型,K-means最终得到的可能是


    K-means的优化目标

    符号:

    • c(i) := 表示样本x(i)当前所属的类
    • μk = 第 k 个类别的中心
    • μc(i) = 样本x(i)所属类的聚类中心

    则K-means的优化目标

    [underbrace {min }_{{c^{left( 1 ight)}},...,{c^{left( m ight)}},{mu _1},...,{mu _K}}Jleft( {{c^{left( 1 ight)}},...,{c^{left( m ight)}},{mu _1},...,{mu _K}} ight) = frac{1}{m}sumlimits_{i = 1}^m {{{left| {{x^{left( i ight)}} - {mu _{{c^{left( i ight)}}}}} ight|}^2}} ]

    意思是:最小化所有“数据与其所属类别中心距离的平均值”

    我们可以用这个算是函数判断算法是否正常运行。


    关于随机选取

    首先,K < m

    一种方法是随机选取K个样本作为“初始聚类中心”

    注意:如果随机算则的初始聚类中心不当,就可能陷入局部最小。

    为了避免这种情况,可以尝试多次随机选取初始聚类中心的方法(比如50-1000次),然后选取其中“损失函数”最小的那个


    如何选择K(聚类数)

    一种方法是:“Elbow method”

    画出K-means的代价函数随K值变化的曲线,选择“elbow”所在位置的K(这里选择3)

    但是这种方法很少用,因为,通常情况下得到的图会是如下情况,这样就很难作出判断

    有些时候,你运用K-means方法聚类是为了之后的目的,而不是聚多少类在数学意义上最合理。(比如,衣服的尺码是分为3类还是5类,那就看那种分类卖得好,更符合市场需求)

  • 相关阅读:
    Hacker(22)----解除系统中的密码
    Hacker(21)----密码攻防之加密与解密基础
    Hacker(20)----手动修复Windows系统漏洞
    Hacker(19)----检测Windows系统漏洞
    Hacker(18)----了解Windows系统漏洞
    Hacker(17)----认识Windows系统漏洞
    Linux通过nfs挂载根文件系统失败:VFS: Unable to mount root fs via NFS, trying floppy.
    恶补各种知识(编程基础篇)
    恶补各种知识(操作系统篇)
    恶补各种知识(查找排序篇)
  • 原文地址:https://www.cnblogs.com/qkloveslife/p/9901847.html
Copyright © 2011-2022 走看看