zoukankan      html  css  js  c++  java
  • K-means算法简介

      K-means 算法是无监督的 聚类算法,算法简单,有效。

    K-means算法:

    输入参数:

      指定聚类数目 k,训练集 X

    输出 :

      k 个聚类

    算法描述:

      K-means 算法 是一个 迭代算法,每次迭代分成两个步骤:

        1)指定聚类步骤:

          计算每个样本到 k 个 聚类中心的 距离,将样本归类到 距离 聚类中心 最小的那个类别

        2)移动聚类中心步骤:

          根据每个聚类所拥有的样本点,重新计算每个聚类的中心

    伪代码描述:

      随机初始化 k 个聚类的 中心 u(1), u(2)... u(k)

      repeat {

        for i = 1 to m # 假设有m 个样本

          c(i) = 聚类中心 离 X(i) 最近的那个聚类的下标索引 #(1,2... k)

        for i = 1 to k # k 个类别

          u(i) =  属于 i 聚类所有 点的 平均值,即 中心  

      } 

      注意:停止条件可以自己设定,比如 归类不再发生变化,或者最多 N次迭代 等

    K-means算法 = 优化问题:

      K-means的优化目标:

        J(c(1), c(2)...c(m), u(1), u(2)...u(k)) = 1/2 * sum( ||x(i) - uc(i) || ^2)

        min J

      对应到算法:

        1)指定聚类步骤时,保持聚类中心不变,通过改变每个样本所属聚类来最小化 J;

        2)移动聚类中心步骤时,通过移动调整聚类中心 来 最小化 J。

        

    K-means算法存在问题:

      往往K-means算法的解空间存在多个满足 J 局部最小值,因此K-means算法得到的解,很有可能只是满足 J 局部最小的那个解,而不是全局最小的那个解。

    一种避免方案:

      运行 K-means 算法 n 次,比如 n = 100 次,每次 都是 随机初始化 k 个 聚类中心, 然后迭代最后收敛得到 k 个 聚类。

      最后,依此计算 这 n 次 J 值,选择 J 值 最小那次 得到的 k 个 聚类

    如何选择 k?:

      计算 J 随着 k 数目变化 而 如何变化,k = 1, 2 .. 

      如果选择的 k 是 发生比较明显转折的那个点,就叫做 elbow method

  • 相关阅读:
    Kubernetes --- 详细介绍和架构详解
    使用kubeadm方式安装K8S
    ResourceManager学习之Application,状态机管理
    ResourceManager学习之ApplicationMaster,NodeManager管理
    ResourceManager基本职能和内部架构
    YARN底层基础库
    Hadoop RPC机制详解
    Yarn介绍(设计理念与基本架构)
    Flume 初探
    Python
  • 原文地址:https://www.cnblogs.com/simplelovecs/p/5136686.html
Copyright © 2011-2022 走看看