1

我知道k-means聚类是最简单的无监督学习算法之一。查看打包在MLlib中的流式k均值聚类的源代码,我找到了术语:训练数据,测试数据,预测和训练。是否在Spark监督或无监督的MLlib库中预定义了流式k均值聚类?

这让我觉得这个流式K-means可能受到监督。那么,这个算法是受监督的还是无人监督的?

这是使用流k均值的一个代码示例:

package org.apache.spark.examples.mllib 

import org.apache.spark.SparkConf 
import org.apache.spark.mllib.clustering.StreamingKMeans 
import org.apache.spark.mllib.linalg.Vectors 
import org.apache.spark.mllib.regression.LabeledPoint 
import org.apache.spark.streaming.{Seconds, StreamingContext} 


object StreamingKMeansExample { 

    def main(args: Array[String]) { 
     if (args.length != 5) { 
      System.err.println( "Usage: StreamingKMeansExample " + 
       "<trainingDir> <testDir> <batchDuration> <numClusters>   <numDimensions>") 
      System.exit(1) 
     } 

     val conf = new SparkConf().setMaster("localhost").setAppName 
     ("StreamingKMeansExample") 
     val ssc = new StreamingContext(conf, Seconds(args(2).toLong)) 

     val trainingData = ssc.textFileStream(args(0)).map(Vectors.parse) 
     val testData = ssc.textFileStream(args(1)).map(LabeledPoint.parse) 

     val model = new StreamingKMeans().setK(args(3).toInt) 
     .setDecayFactor(1.0) 
     .setRandomCenters(args(4).toInt, 0.0) 

     model.trainOn(trainingData) 
     model.predictOnValues(testData.map(lp => (lp.label,  lp.features))).print() 

     ssc.start() 
     ssc.awaitTermination() 
    } 
} 

回答

1

K-装置(流或定期)是聚类算法。聚类算法根据定义是无监督的。也就是说,您不知道数据的自然分组(标签),并且想要将相似的实体自动分组在一起。

这里的术语train指的是“学习”簇(质心)。

术语predict指预测新点属于哪个簇。