StreamingKMeans setSeed () - PullRequest
       13

StreamingKMeans setSeed ()

0 голосов
/ 15 февраля 2019

Мне нужно обучить 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

Как я могу установить семя в этом случае?

1 Ответ

0 голосов
/ 15 февраля 2019

Ошибка говорит о том, что setSeed член org.apache.spark.mllib.clustering.StreamingKMeans не существует (что можно проверить из API docs ; как ни странно, этот метод существует дляKMeans class, но не для 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)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...