如何使用Spark Mlib多层感知器重量阵列

时间:2016-01-13 17:53:57

标签: apache-spark-mllib apache-spark-ml

我有一个要求,我需要找到ANN实现中使用的属性的相对重要性。我使用spark MLib库MultiLayerPerceptron来实现。该模型给了我一个矢量,它是一个权重数组。我知道有一些算法可以从权重中推导出相对重要性,但是MLib实现给出了一个大的单维数组,并没有说明与每个输入相对应的权重。任何人都知道如何获得与每个输入节点相对应的权重吗?

1 个答案:

答案 0 :(得分:1)

model使用Breeze操作来展平权重矩阵:toDenseVector。 (注意这一行:val brzWeights: BV[Double] = weightsOld.asBreeze.toDenseVector

这种操纵acts like numpy's flatten()。 因此,要检索权重矩阵,您必须做两件事:

  1. 根据您的图层将权重向量拆分为多个部分。由于偏差,您必须为每个非最终图层(layerSize + 1) * nextLayerSize采用+1个权重。
  2. 对于每个展平的权重矩阵,应用numpy的{​​{1}}参数reshape
  3. 当您从权重中推导出相对重要性时,请注意在pyspark implementation中,偏差表示为最后一个要素:from the docs:

    因此,每个权重矩阵中的最后一行代表偏差值。