【机器学习笔记五】聚类 - k均值聚类

参考资料:

【1】Spark Mlib 机器学习实践

【2】机器学习

【3】深入浅出K-means算法  http://www.csdn.net/article/2012-07-03/2807073-k-means

 

一、概念

K-means聚类是在无监督的情况下,将样本数据进行聚类。以2均值聚类的算法为例:

1、在样本中选择两个初始化中心点;

2、计算所有样本到这两个中心点的距离,并以此为基准将样本分为两类;

3、将中心点移到这类样本的新中心点;

4、重复2、3步骤直到满足要求;

K-means也提供一种k维的one-hot编码,即当x属于聚类i时,那么对应的编码向量为1,否则为0

 

二、距离

K-means的计算依赖样本之间的距离计算,通常有如下几种:

 

三、Spark Mlib下例子

复制代码
package kmean

import org.apache.spark.mllib.clustering.KMeans
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.{SparkContext, SparkConf}

/*-
 * kmean聚类
 * Fredric 2017
 */
object kmean {
  def main(args:Array[String]): Unit ={

    val conf = new SparkConf().setMaster("local").setAppName("kmean")
    val sc   = new SparkContext(conf)

    //每一个向量代表特征空间中的一个点
    val v0  = Vectors.dense(1)
    val v1  = Vectors.dense(2)
    val v2  = Vectors.dense(3)
    val v3  = Vectors.dense(4)

    val v4  = Vectors.dense(11)
    val v5  = Vectors.dense(25)
    val v6  = Vectors.dense(31)

    val data = sc.parallelize(Seq(v0, v1, v2, v3, v4, v5, v6))

    //setK表示最后聚类的分组数量是2,分成2组
    val model = new KMeans().setMaxIterations(20).setK(2).run(data)

/*
    输出的两个中心点如下:
    [4.2]
    [28.0]*/
    model.clusterCenters.foreach(println)
  }
}
复制代码
posted @   Fredric_2013  阅读(301)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示