参考资料:web
【1】Spark Mlib 机器学习实践算法
【2】机器学习apache
【3】深刻浅出K-means算法 http://www.csdn.net/article/2012-07-03/2807073-k-means机器学习
1、概念学习
K-means聚类是在无监督的状况下,将样本数据进行聚类。以2均值聚类的算法为例:编码
一、在样本中选择两个初始化中心点;spa
二、计算全部样本到这两个中心点的距离,并以此为基准将样本分为两类;.net
三、将中心点移到这类样本的新中心点;code
四、重复二、3步骤直到知足要求;blog
K-means也提供一种k维的one-hot编码,即当x属于聚类i时,那么对应的编码向量为1,不然为0
2、距离
K-means的计算依赖样本之间的距离计算,一般有以下几种:
3、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) } }