StreamingKMeans setSeed()

时间:2019-02-14 21:08:18

标签: 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)

我遇到错误:

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

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

1 个答案:

答案 0 :(得分:2)

错误告诉您setSeed没有org.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之类的方法通常不会修改(或 mutate )该实例。相反,它将创建一个新实例并对其应用修改。

在代码中,由于没有存储结果,因此有效地放弃了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)))