【问题标题】:How to get feature vector column length in Spark Pipeline如何在 Spark Pipeline 中获取特征向量列的长度
【发布时间】:2017-08-16 12:26:28
【问题描述】:

我有一个有趣的问题。

我正在使用 Pipeline 对象来运行 ML 任务。

这就是我的 Pipeline 对象的样子。

jpsa_mlp.pipeline.getStages()
Out[244]:
[StringIndexer_479d82259c10308d0587,
 Tokenizer_4c5ca5ea35544bb835cb,
 StopWordsRemover_4641b68e77f00c8fbb91,
 CountVectorizer_468c96c6c714b1000eef,
 IDF_465eb809477c6c986ef9,
 MultilayerPerceptronClassifier_4a67befe93b015d5bd07]

此管道对象内的所有估计器和转换器都已编码为类方法的一部分,而 JPSA 是类对象。

现在我想提出一种超参数调整的方法。所以我在下面使用:

 self.paramGrid = ParamGridBuilder()\
            .addGrid(self.pipeline.getStages()[5].layers, [len(self.pipeline.getStages()[3].vocab),10,3])\
            .addGrid(self.pipeline.getStages()[5].maxIter, [100,300])\
            .build()

问题在于神经网络分类器的超参数之一基本上是隐藏层大小。 MLP分类器的layers属性需要输入层、隐藏层和输出层的大小。输入和输出是固定的(基于我们拥有的数据)。所以我想把输入层的大小作为我的特征向量的大小。但是我不知道我的特征向量的大小,因为管道对象内用于创建特征向量的估计器(Count Vectorizer,IDF)尚未适合数据。

管道对象将使用 Spark 的交叉验证器对象在交叉验证期间拟合数据。那么只有我才能让 CountVectorizerModel 知道特征向量的大小。

如果我实现了 Countvectorizer,那么我可以使用 countvectorizerModel.vocab 来获取特征向量的长度,并将其用作 mlp 的图层属性中输入层值的参数。

那么,如何为 mlp 的层添加超参数(隐藏层和输入层大小)?

【问题讨论】:

    标签: python apache-spark pyspark


    【解决方案1】:

    您可以从数据框架构元数据中找到该信息。

    Scala 代码:

    val length = datasetAfterPipe.schema(datasetAfterPipe.schema.fieldIndex("columnName"))
        .metadata.getMetadata("ml_attr").getLong("num_attrs")
    

    【讨论】:

      【解决方案2】:

      由于请求了 PySpark 代码:

      你可以让他们“导航”元数据:datasetAfterPipe.schema["features"].metadata["ml_attr"]

      这里是示例输出(xxx 是所有特征被制成特征列,最终结果是大小):

      Out: 
          {'attrs': {'numeric': [{'idx': xxxxxxx }]}, 'num_attrs': 337}
      

      所以你切片元数据:

      lenFeatureVect = datasetAfterPipe.schema["features"].metadata["ml_attr"]["num_attrs"]
      
      print('Len feature vector:', lenFeatureVect)
      Out: 
         337
      

      Note: 如果你有"scaled features" 那么你需要使用"pre-Scaled""features" 以获取属性信息(假设你在矢量化后缩放,否则如果你提供原始列,则不会受到应用限制)因为你提供特征 向量到流水线的那一步。

      【讨论】:

        猜你喜欢
        • 2022-01-05
        • 2015-05-20
        • 1970-01-01
        • 1970-01-01
        • 2016-06-13
        • 2017-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多