бесконечный центроид для искры скала kmeans - PullRequest
0 голосов
/ 25 сентября 2018

(я думаю, что я почти уверен, что ответ)

вот мой код:

val fileName = """file:///home/user/data/csv/sessions_sample.csv"""
val df = spark.read.format("csv").option("header", "true").option("inferSchema", "true").load(fileName)

// calculate input for kmeans
val input1 = df.select("id", "duration", "ip_dist", "txr1", "txr2", "txr3", "txr4").na.fill(3.0)
val input2 = input1.map(r => (r.getInt(0), Vectors.dense((1 until r.size - 1).map{ i =>  r.getDouble(i)}.toArray[Double])))
val input3 = input2.toDF("id", "features")

// initiate kmeans
val kmeans = new KMeans().setK(100).setSeed(1L).setFeaturesCol("features").setPredictionCol("prediction")
val model = kmeans.fit(input3)
val model = kmeans.fit(input3.select("features"))

// Make predictions
val predictions = model.transform(input3.select("features"))
val predictions = model.transform(input3)
val evaluator = new ClusteringEvaluator()

// i get an error when i run this line
val silhouette = evaluator.evaluate(predictions)

java.lang.AssertionError: сбой подтверждения: Количество кластеровдолжно быть больше единицы.в scala.Predef $ .assert (Predef.scala: 170) в org.apache.spark.ml.evaluation.SquaredEuclideanSilhouette $ .computeSilhouetteScore (ClusteringEvaluator.scala: 416) в org.apache.spark.ml.evaluation.ClusteringEvaluator.eateate(ClusteringEvaluator.scala: 96) ... 49 elided

Но мои центроиды выглядят так:

model.clusterCenters.foreach(println)

[3217567.1300936914,145.06533614203505, Бесконечность, Бесконечность, Бесконечность]

я думаю, что из-за того, что некоторые центры бесконечны => kmeans нестабилен => мера силуэта идет не так.Но это все еще не отвечает, почему, если я пытаюсь изменить k, любое k> 1 до сих пор, у меня есть ошибка, говорящая, что "Число кластеров должно быть больше чем один".

пожалуйста, совет.

1 Ответ

0 голосов
/ 05 июня 2019

Я однажды увидел то же сообщение.Основная причина в том, что все данные одинаковы (мои данные генерируются программой), поэтому, конечно, существует только один кластер.Кстати, я не проверял его центры, поэтому я не уверен, совпадает ли мой случай с вашим.

...