Spark之K-均值算法
Spark框架在MLlib库中提供了一些常用的机器学习的功能,其中就有聚类算法,包括K-均值算法
K-均值算法的Spark实现有以下参数
- K是期望簇数
- maxIterations是运行最大迭代次数
- initializationMode是指定随机初始化还是通过kmeans||初始化
- runs 是运行k-means算法次数
- initializationsStep是确定kmeans||算法中步数
- epsilon是确定距离阈值,达到这个阈值时就可以认为K-均值算法已经收敛
输入数据如下:
数据为二维坐标
1.0 2.0
1.0 3.0
1.0 4.0
2.0 5.0
2.0 6.0
2.0 7.0
2.0 8.0
3.0 100.0
3.0 101.0
3.0 102.0
3.0 103.0
3.0 104.0
在这里设置簇数为3,最大迭代次数为10
scala版本如下:
package Kmeans
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.mllib.clustering.KMeans
import org.apache.spark.mllib.linalg.Vectors
object Kmeans{
def main(args: Array[String]): Unit={
val sparkConf=new SparkConf().setAppName("Kmeans").setMaster("local")
val sc=new SparkContext(sparkConf)
val input="input/kmeans.txt"
val k=3; //期望簇数
val iterations=10; //最大迭代次数
val lines=sc.textFile(input)
val points=lines.map(line=>{
val tokens=line.split(" ")
Vectors.dense(tokens.map(_.toDouble))
})
val model=KMeans.train(points,k,iterations,KMeans.K_MEANS_PARALLEL)
println("Cluster centers: ")
model.clusterCenters.foreach(println)
val cost=model.computeCost(points)
println(s"Cost :${cost}")
sc.stop()
}
}