zoukankan      html  css  js  c++  java
  • 简单比较k-means和k-medoids

    简单对比一下这两者的区别。两者的主要区别主要在质心的选择中,k-means是样本点均值,k-medoids则是从样本点中选取。

    首先给出两者的算法实现步骤:

    K-means

    1、随机选取K个质心的值 

    2、计算各个点到质心的距离 

    3、将点的类划分为离他最近的质心,形成K个cluster 

    4、根据分类好的cluster,在每个cluster内重新计算质心(平均每个点的值)

    5、重复迭代2-4步直到满足迭代次数或误差小于指定的值

    K-medoids


    1、随机选取K个质心的值 (质心必须是某些样本点的值,而不是任意值)

    2、计算各个点到质心的距离 

    3、将点的类划分为离他最近的质心,形成K个cluster 

    4、根据分类好的cluster,在每个cluster内重新计算质心:

                 4.1 计算cluster内所有样本点到其中一个样本点的曼哈顿距离和(绝对误差)

                 4.2  选出使cluster绝对误差最小的样本点作为质心

    5、重复迭代2-4步直到满足迭代次数或误差小于指定的值


    以上就可以看出两者之间的区别:

    k-means的质心是各个样本点的平均,可能是样本点中不存在的点。k-medoids的质心一定是某个样本点的值。

    这个不同使他们具有不同的优缺点。

    1、k-medoids的运行速度较慢,计算质心的步骤时间复杂度是O(n^2),因为他必须计算任意两点之间的距离。而k-means只需平均即可。

    2、k-medoids对噪声鲁棒性比较好。例:当一个cluster样本点只有少数几个,如(1,1)(1,2)(2,1)(100,100)。其中(100,100)是噪声。如果按照k-means质心大致会处在(1,1)(100,100)中间,这显然不是我们想要的。这时k-medoids就可以避免这种情况,他会在(1,1)(1,2)(2,1)(100,100)中选出一个样本点使cluster的绝对误差最小,计算可知一定会在前三个点中选取。

    以上。虽然k-medoids也有优点,但是他只能对小样本起作用,样本一大,他的速度就太慢了,而且当样本多的时候,少数几个噪音对k-means的质心影响也没有想象中的那么重,所以k-means的应用明显比k-medoids多的多。
    ————————————————
    版权声明:本文为CSDN博主「databatman」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/databatman/article/details/50445561

  • 相关阅读:
    【shell】 for循环
    【shell】case语句
    【shell】if语句
    【shell】nmap工具的使用
    spring3 循环依赖
    spring3 DI基础
    spring3系列一
    正则表达式学习网址
    常用正则表达式
    hibernate延迟加载
  • 原文地址:https://www.cnblogs.com/liyuewdsgame/p/13252951.html
Copyright © 2011-2022 走看看