【问题标题】:How to use the Spark Mlib Multilayer Perceptron Weights Array如何使用 Spark Mllib 多层感知器权重数组
【发布时间】:2017-10-18 20:27:22
【问题描述】:
我有一个要求,我需要找到在 ANN 实现中使用的属性的相对重要性。我使用 spark MLib 库 MultiLayerPerceptron 来实现。该模型给了我一个向量,它是一个权重数组。我知道有一些算法可以从 weights 中推导出相对重要性,但是 MLib 实现给出了一个大的一维数组,并没有说明与每个输入对应的权重。有人知道如何获取每个输入节点对应的权重吗?
【问题讨论】:
标签:
apache-spark-mllib
apache-spark-ml
【解决方案1】:
model 使用Breeze 操作使权重矩阵变平:toDenseVector。 (注意这一行:val brzWeights: BV[Double] = weightsOld.asBreeze.toDenseVector)
这个操作acts like numpy's flatten()。
因此,要检索权重矩阵,您必须做两件事:
- 根据您的层将权重向量拆分为多个部分。您必须为每个非最终层采用
(layerSize + 1) * nextLayerSize 权重(+1 因为存在偏差)。
- 对于每个展平的权重矩阵,应用
numpy 的reshape 和参数(layerSize + 1, nextLayerSize)。
当您从权重导出相对重要性时,请注意在pyspark implementation 中,偏差表示为最后一个特征:。
因此每个权重矩阵的最后一行代表偏差值。