在将K均值应用于PCA数据时获取要求失败的异常

时间:2019-02-13 18:20:39

标签: apache-spark machine-learning

我正在Spark Spark ML的某些缩放功能(即Spark数据帧的一列)上尝试使用K均值。它按预期工作。但是,一旦我将PCA应用于相同的功能集并尝试使用K表示该功能,就会收到错误消息

java.lang.IllegalArgumentException:要求失败

我在PCA之前的原始数据具有108个特征,这些特征已经过索引和组装。 K表示可以正常运行,并且没有null / NAN。之后,我将运行PCA的主要组件数设置为6。在PCA数据上,K表示正在运行,并且出现上述错误。

查看stacktrace显示错误在MLUtils中的fastSquaredDistance中

function parseDirectory(directory) {
  let out = {};

  fs.readdirSync(directory).forEach(item => {
    const itemPath = `${directory}/${item}`;

    if (fs.statSync(itemPath).isDirectory()) {
      out[item] = parseDirectory(itemPath);
    } else {
      out[item] = itemPath;
    }
  });

  return out;
}

当向量的尺寸不相同或向量范数为负时,这将引发异常

我检查了PCA列中所有向量的大小,所有向量的大小均为6(符合预期)。至于非负面规范,我什至不知道那怎么可能。

有人能引导发生什么事吗?

很抱歉,如果我的问题格式不正确,这是我第一次在这里提出问题

引发错误的代码如下

.......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)    

0 个答案:

没有答案