scala - StreamingKMeans setSeed()

标签 scala apache-spark apache-spark-mllib

我需要使用特定的种子值来训练 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)))

效果很好。但是当我尝试使用 sedSeed 时:

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

我收到错误:

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

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

最佳答案

该错误告诉您,org.apache.spark.mllib.clustering.StreamingKMeans 中没有 setSeed 成员(您可以从 API docs 进行验证) ;奇怪的是,这个方法确实存在于 KMeans 类中,但不存在于 StreamingKMeans 中)。

但是,一切并没有失去......;-)

setRandomCenters 方法采用 3 个参数,其中第三个参数是随机种子。它的值默认为Utils.random.nextLong。要执行您想要的操作,您应该将该行更改为:

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

至:

km.setRandomCenters(10, 0.5, 6250L)

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

在您的代码中,您实际上放弃了 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)))

关于scala - StreamingKMeans setSeed(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54699079/

相关文章:

java - Spark 结构化流 : converting row to json

scala - 无法使用 IDEA 和 SBT 运行 LWJGL

Scala 代码运行时无需使用 scalac 进行编译?

sql - Spark如何比较boolean和string类型的数据

python - PySpark 插入到覆盖

apache-spark - 在 Spark Streaming (Spark 2.0) 中使用 Kafka

scala - 猫从 monad 堆栈中获取值(value)

scala - Spark Scala TF-IDF 值排序向量

java - 在 Java Spark 中使用 Jackson 2.9.9

python - 使用spark ML 2.2.0中的sklearn-python模型进行预测