• 【算法】K-Means聚类算法(k-平均或k-均值)


    1.聚类算法和分类算法的区别

    a)分类

    分类(Categorization or Classification)就是按照某种标准给对象贴标签(label),再根据标签来区分归类。

    举例:

    假如你有一堆动物的头像图片样本,想把它们进行分类,分成:猫,狗,鱼等。当在有新的动物图片进来之后,能够自动的识别出属于哪一类,这就是分类,而猫,狗,鱼等就是标签

    b)聚类

    聚类是指事先没有“标签”而通过某种成团分析找出事物之间存在聚集性原因的过程。聚类是在没有划分类别的情况下,根据数据相似度进行样本分组的一种方法。

    与分类模型需要使用有类标记样本构成的训练数据不同,聚类模型可以建立在无类标记的数据上,是一种非监督的学习算法。

    举例:

    假如你有一堆数据样本,想把这些数据分类,但是你也不知道怎么分,你只知道要分3类,4类或者其他更多。这时候就等于是把一堆零散的样本聚成几类。

    c)总结:分类和聚类最大的区别就是有无标签。

    2.K-means属于聚类算法

    假设你有X1——Xi个样本,想把它们分成Uk个中心

    算法的步骤:

    a).随机的选择U1---Uk个中心,用样本Xi去减分别减这个中心值,得到距离类别中心最近的类别,归为同一个簇。
    b).将这个簇的中心值归为这个簇的所有样本的平均值,重新执行第一步。
    c).不断进行迭代,也就是不断的执行a)和b)两步,直到类别中心小于某个阈值也就是终止条件。

    这些终止条件可以是:1)迭代次数; 2)簇中心变化率 ;3)最小平方误差

    3.注意事项:

    a).K-means算法是初始敏感的

    如下图:在初始选择簇类点时,对后面的聚类影响很大,下面初始选择4个红点作为簇类中心,结果就变成了右边这种情况了。并不是我们想要分成的四类

    解决办法:聚类完之后计算一下簇的均方误差,如果某一个簇的均方误差特别大,就可以判断这个簇聚的不对,初值选的不行,把簇中心比较近的合成一类,重新再聚一遍

    这种叫做二分K-Means聚类

    b)异常点处理

    K—Means算法是将簇中所有的均值作为质心,若簇中含有异常点,将导致均值偏离严重。

    例如:当有一个数组:1,2,3,4,100的均值是22,显然距离大多数数据比较远

    解决办法:该取中位数3为比较稳妥。这种取中位数的为簇中心的算法叫K-Mediods聚类

    4.总结:

    虽然有以下缺点:

    a)不适合于发现非凸形状的簇或者大小差别很大的簇

    b)对噪声和孤立点数据敏感

    但是,K-Means聚类算法可以作为其他聚类算法的基础

  • 相关阅读:
    Linux 高性能server编程——高级I/O函数
    中国儿童移动游戏市场解读 潜力巨大有待开发
    HDU 2152 Fruit (母函数)
    Currying vs Partial Application
    我的最爱Lambda演算——开篇
    函数式编程-数据结构+算法
    高阶函数 、高阶类型
    高阶函数-哈哈
    备份-泛函编程(23)-泛函数据类型-Monad
    高阶函数
  • 原文地址:https://www.cnblogs.com/liangxuehui/p/5804894.html
Copyright © 2020-2023  润新知