正文
另外,给出损失函数(Cost Function),每一次选取好新的中心点,我们就要计算一下当前选好的中心点损失为多少,这个损失代表着偏移量,越大说明当前聚类的效果越差,计算公式称为(Within-Cluster Sum of Squares, WCSS):
其中,xi表示某一对象,ck表示该对象所属类别的中心点。整个式子的含义就是对各个类别下的对象,求对象与中心点的欧式距离的平方,把所有的平方求和就是L(C)。
测试数据:
0.0 0.0
0.1 0.1
0.2 0.2
3.0 3.0
3.1 3.1
3.2 3.2
9.0 9.0
9.1 9.1
9.2 9.2
Scala版KMeans代码示例:
import org.apache.spark.mllib.clustering.KMeans
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.{SparkConf, SparkContext}
object KMeansTest {
def main(args: Array[String]) {
val conf = new SparkConf()
val sc = new SparkContext(conf)
val data =sc.textFile(args(0))
val parsedData =data.map(s => Vectors.dense(s.split(' ').map(_.trim.toDouble))).cache()
//设置簇的个数为3
val numClusters =3
//迭代20次
val numIterations= 20
//运行10次,选出最优解
val runs=10
//设置初始K选取方式为k-means++
val initMode = "k-means||"
val clusters = new KMeans().
setInitializationMode(initMode).