流式 KMeans setSeed()
StreamingKMeans setSeed()
我需要使用特定的种子值来训练 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
class,但不适用于 StreamingKMeans
)。
然而,一切并没有丢失……;-)
setRandomCenters
方法有3个参数,第三个是随机种子。它的值默认为 Utils.random.nextLong
。做你想做的,你应该改变这一行:
km.setRandomCenters(10, 0.5).setSeed(6250L)
至:
km.setRandomCenters(10, 0.5, 6250L)
更新:顺便说一下,Spark 使用了函数式编程 范式。因此,在 StreamingKMeans
实例上调用诸如 .setRandomCenters
的方法通常不会修改(或 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)))
我需要使用特定的种子值来训练 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
class,但不适用于 StreamingKMeans
)。
然而,一切并没有丢失……;-)
setRandomCenters
方法有3个参数,第三个是随机种子。它的值默认为 Utils.random.nextLong
。做你想做的,你应该改变这一行:
km.setRandomCenters(10, 0.5).setSeed(6250L)
至:
km.setRandomCenters(10, 0.5, 6250L)
更新:顺便说一下,Spark 使用了函数式编程 范式。因此,在 StreamingKMeans
实例上调用诸如 .setRandomCenters
的方法通常不会修改(或 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)))