我正在尝试使用2.0.2中的apache spark ml版本实现k意味着群集。找到集群中心后,面临着如何识别数据属于哪个集群点的问题。请帮帮我..先谢谢。请找我的代码:
val tokenFrameprocess = TokenizerProcessor.process(" value"," tokenized")
val stopwordRemover = StopWordsProcessor.process("tokenized", "stopwords")
val stemmingProcess = StemmingProcessor.process("value", "stemmed")
val HashingProcess = HashingTFProcessor.process("stopwords" ,"features")
val pipeline = new Pipeline().setStages(Array(tokenFrameprocess,stopwordRemover,stemmingProcess,HashingProcess))
val finalFrameProcess = pipeline.fit(df)
val finalFramedata = finalFrameProcess.transform(df);
val kmeans = new KMeans().setK(4).setSeed(1L)
val model = kmeans.fit(finalFramedata)
val WSSSE = model.computeCost(finalFramedata)
// Shows the result.
println("Cluster Centers: ")
model.clusterCenters.foreach(println)
答案 0 :(得分:1)
您需要设置功能列,用于在实例化Kmeans时进行预测,如下例所示:
val kmeans = new KMeans().setK(4).setSeed(1L).setFeaturesCol("features").setPredictionCol("prediction")
在kmeans上调用.fit()后,它会返回Transformer。在你的例子的情况下,变量"模型"是一个变压器。您可以调用.transform()来获取给定数据的预期预测。例如,下面的行将为您提供带有预测列的数据框。
val model = kmeans.fit(finalFramedata)
val transformedDF = model.transform(finalFramedata)
transformedDF.show(false)
预测列表示聚类点。如果将k值设为3,则预测列的值将为0,1,2。