Не удалось получить требование исключения при применении K-средних к данным PCA - PullRequest
0 голосов
/ 13 февраля 2019

Я пытался использовать K-средство из Spark ML на некоторых масштабируемых объектах, представляющих собой столбец кадра данных искры.Работает как положено.Тем не менее, как только я применяю PCA к тому же набору функций и пытаюсь использовать K для этого, я получаю ошибку

java.lang.IllegalArgumentException: требование не выполнено

Мои исходные данные перед PCAимеет 108 функций, которые были проиндексированы и собраны.K означает, что работает нормально, и нет нулей / NAN.После этого я устанавливаю количество основных компонентов равным 6, используя PCA.На данных PCA K означает, что выполняется, и я получаю вышеупомянутую ошибку.

Просмотр трассировки стека показывает, что ошибка находится в fastSquaredDistance в MLUtils

.......at scala.Predef$.require(Predef.scala:212)
at org.apache.spark.mllib.util.MLUtils$.fastSquaredDistance(MLUtils.scala:486)
at org.apache.spark.mllib.clustering.KMeans$.fastSquaredDistance(KMeans.scala:589)
at org.apache.spark.mllib.clustering.KMeans$$anonfun$findClosest$1.apply(KMeans.scala:563)
at org.apache.spark.mllib.clustering.KMeans$$anonfun$findClosest$1.apply(KMeans.scala:557)
at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:186)
at org.apache.spark.mllib.clustering.KMeans$.findClosest(KMeans.scala:557)
at org.apache.spark.mllib.clustering.KMeans$.pointCost(KMeans.scala:580)
at org.apache.spark.mllib.clustering.KMeansModel$$anonfun$computeCost$1.apply(KMeansModel.scala:88)
at org.apache.spark.mllib.clustering.KMeansModel$$anonfun$computeCost$1.apply(KMeansModel.scala:88)
at scala.collection.Iterator$$anon$11.next(Iterator.scala:409)
at scala.collection.Iterator$class.foreach(Iterator.scala:893)
at scala.collection.AbstractIterator.foreach(Iterator.scala:1336)
at scala.collection.TraversableOnce$class.foldLeft(TraversableOnce.scala:157)
at scala.collection.AbstractIterator.foldLeft(Iterator.scala:1336)
at scala.collection.TraversableOnce$class.fold(TraversableOnce.scala:212)
at scala.collection.AbstractIterator.fold(Iterator.scala:1336)
at org.apache.spark.rdd.RDD$$anonfun$fold$1$$anonfun$20.apply(RDD.scala:1087)
at org.apache.spark.rdd.RDD$$anonfun$fold$1$$anonfun$20.apply(RDD.scala:1087)
at org.apache.spark.SparkContext$$anonfun$33.apply(SparkContext.scala:2120)
at org.apache.spark.SparkContext$$anonfun$33.apply(SparkContext.scala:2120)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87)
at org.apache.spark.scheduler.Task.run(Task.scala:108)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:338)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)    

Это бросаетисключение, когда размеры векторов не совпадают или когда норма вектора отрицательна

Я проверил размер всех векторов в столбце PCA и все они имеют размер 6 (как и ожидалось),Что касается неотрицательной нормы, я не могу понять, как это вообще возможно.

Есть ли у кого-нибудь сведения о том, что может произойти?

Если мой вопрос не отформатирован должным образом, я прошу прощенияЯ впервые задаю вопрос здесь

Код, выдающий ошибку, находится ниже

....import org.apache.spark.ml.clustering.KMeans


val kmeans = new KMeans().setK(6).setSeed(42L)
val model = kmeans.fit(scaledDataPcaNN).setFeaturesCol("pcaFeatures")
val predictions = model.transform(scaledDataPca)
val WSSSE = model.computeCost(scaledDataPca)    
...