2016-01-13 19 views
3

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

+0

对此的任何答案?我一直想知道权重向量的语义 – besil

回答

0

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

这个操作acts like numpy's flatten()。 因此,取回权重矩阵,你必须做两件事情:

  1. 拆分的权重向量部分,根据您的图层。您必须为每个非最终层(+1由于偏差)采取(layerSize + 1) * nextLayerSize权重。
  2. 对于每个展平的权重矩阵,应用numpyreshape以及参数(layerSize + 1, nextLayerSize)

当您获取权重的相对重要性,注意到在pyspark implementation,偏置表示为最后一个特性:from the docs:

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