zoukankan      html  css  js  c++  java
  • spark Bisecting k-means(二分K均值算法)

    Bisecting k-means(二分K均值算法)

           二分k均值(bisecting k-means)是一种层次聚类方法,算法的主要思想是:首先将所有点作为一个簇,然后将该簇一分为二。之后选择能最大程度降低聚类代价函数(也就是误差平方和)的簇划分为两个簇。以此进行下去,直到簇的数目等于用户给定的数目K为止。 
           以上隐含着一个原则是:因为聚类的误差平方和能够衡量聚类性能,该值越小表示数据点月接近于它们的质心,聚类效果就越好。所以我们就需要对误差平方和最大的簇进行再一次的划分,因为误差平方和越大,表示该簇聚类越不好,越有可能是多个簇被当成一个簇了,所以我们首先需要对这个簇进行划分。

           bisecting k-means通常比常规K-Means方法运算快一些,也和K-Means聚类方法得到结果有所不同。 
        Bisecting k-means is a kind of hierarchical clustering using a divisive (or “top-down”) approach: all observations start in one cluster, and splits are performed recursively as one moves down the hierarchy. 
        Bisecting K-means can often be much faster than regular K-means, but it will generally produce a different clustering. 
           二分k均值算法的伪代码如下:

    将所有的点看成一个簇
    当簇数目小于k时
           对每一个簇:
                  计算总误差
                  在给定的簇上面进行k-均值聚类k=2
                  计算将该簇一分为二后的总误差
           选择使得误差最小的那个簇进行划分操作
    //BisectingKMeans和K-Means API基本上是一样的,参数也是相同的
    //模型训练
    val bkmeans=new BisectingKMeans()
                            .setK(2)
                            .setMaxIter(100)
                            .setSeed(1L)
    val model=bkmeans.fit(dataset)
    
    //显示聚类中心    
    model.clusterCenters.foreach(println)
    
    //SSE(sum of squared error)结果评估    
    val WSSSE=model.computeCost(dataset)
    println(s"within set sum of squared error = $WSSSE")

    Bisecting k-means优缺点 
           同k-means算法一样,Bisecting k-means算法不适用于非球形簇的聚类,而且不同尺寸和密度的类型的簇,也不太适合。

    摘自:http://blog.csdn.net/qq_34531825/article/details/52663428

  • 相关阅读:
    Spring、Spring Boot 和 Spring Cloud 的关系
    Spring Boot 如何设置支持跨域请求?
    什么是嵌入式服务器?我们为什么要使用嵌入式服务器呢?
    nginx配置域名,不要端口
    域名解析以及nginx服务器设置
    为什么使用nginx
    RabbitMQ下载与安装(window版)
    spring的@ComponentScan注解
    spring的@EnableScheduling注解
    日志切割: logrotate、python、shell实现
  • 原文地址:https://www.cnblogs.com/bonelee/p/7229461.html
Copyright © 2011-2022 走看看