StreamingKMeans setSeed()

问题描述 投票:2回答:1

我需要训练具有特定种子值的StreamingKMeans。我跑的时候

val km = new StreamingKMeans(3, 1.0, "points")
km.setRandomCenters(10, 0.5)
val newmodel = km.latestModel.update(featureVectors, 1.0, "points")

val prediction3 = id_features.map(x=> (x._1, newmodel.predict(x._2)))

它工作正常。但是当我尝试使用set Seed时:

km.setRandomCenters(10, 0.5).setSeed(6250L)

我收到一个错误:

value setSeed不是org.apache.spark.mllib.clustering.StreamingKMeans的成员

在这种情况下如何设置种子?

scala apache-spark apache-spark-mllib
1个回答
2
投票

错误告诉你没有setSeedorg.apache.spark.mllib.clustering.StreamingKMeans成员(你可以从API docs验证;奇怪的是,这种方法确实存在于KMeans类,但不适用于StreamingKMeans)。

但是,一切都不会丢失...... ;-)

setRandomCenters方法有3个参数,第三个是随机种子。它的值默认为Utils.random.nextLong。要做你想做的事,你应该改变这一行:

km.setRandomCenters(10, 0.5).setSeed(6250L)

至:

km.setRandomCenters(10, 0.5, 6250L)

更新:顺便提一下,Spark使用函数式编程范例。因此,在.setRandomCenters实例上调用StreamingKMeans等方法通常不会修改(或改变)该实例。相反,它会创建一个应用了修改的新实例。

在您的代码中,您有效地放弃了SetRandomCenters所做的更改,因为您不存储结果。你的代码应该看起来像这样:

val km = new StreamingKMeans(3, 1.0, "points").setRandomCenters(10, 0.5)

val newmodel = km.latestModel.update(featureVectors, 1.0, "points")

val prediction3 = id_features.map(x=> (x._1, newmodel.predict(x._2)))
© www.soinside.com 2019 - 2024. All rights reserved.