zoukankan      html  css  js  c++  java
  • K-means

    聚类,与其说他是机器学习,不如说是数据挖掘,对数据直接进行处理

    前提假设:
    假设你的数据分布是均匀的,不希望你的数据是稀疏或密集时候,用k-means是不理想的;对异常值比较敏感,对初始化也很敏感。
    假设数据特征之间的联合分布是椭圆的,这个条件在真实世界很难满足。

    K-means算法:

    初始化 :随机选择K个点,作为初始中心点,每个点代表一个group
    交替更新:

    • 计算每个点到所有中心点的距离,把最近的距离记录下来并
      赋把group赋给当前的点
    • 针对于每一个group里的点,计算其平均并作为这个group的
      新的中心点。

    问题4:K值如何选择:找Inertia的拐点

    K-Means++

    与k-means初始化不同:
    1.从数据点中随机选择一个中心。
    2. 对于每个数据点x, 计算D(x), 即x与已经选择的最接近中心之间的距离。
    3. 使用加权概率分布随机选择一个新的数据点作为新的中心,其中选择点 x
    的概率与D(x)^2成正比。
    4. 重复步骤2和3,直到选择了k个中心。
    5. 现在已经选择了初始中心,继续使用标准k均值聚类。

    例子:假设k=3时,


    -->
    -->
    -->

  • 相关阅读:
    [hdu2196]Computer树的直径
    [poj2342]Anniversary party树形dp入门
    链式前向星模板
    LintCode-50.数组剔除元素后的乘积
    Markdown的基本语法
    LintCode-8.旋转字符串
    LintCode-1.A + B 问题
    LintCode-61.搜索区间
    LintCode-88.最近公共祖先
    LintCode-54.转换字符串到整数
  • 原文地址:https://www.cnblogs.com/Towerb/p/14152100.html
Copyright © 2011-2022 走看看