spark ml管道处理看不见的标签

时间:2017-01-12 15:01:14

标签: apache-spark pipeline categorical-data apache-spark-ml

要处理spark ml管道中新的和看不见的标签,我想使用最频繁的插补。 如果管道包含3个步骤

  1. 预处理
  2. 学习最频繁的项目
  3. 每个分类列的stringIndexer
  4. vector assembler
  5. 估算器,例如随机森林
  6. 假设(1)和(2,3)和(4,5)构成单独的管道

    • 我可以适应和转换1列车和测试数据。这意味着处理所有的纳米值,即估算
    • 2,3将很好地适合4,5
    • 然后我可以使用

    以下

    val fittedLabels = pipeline23.stages collect { case a: StringIndexerModel => a }
    val result = categoricalColumns.zipWithIndex.foldLeft(validationData) {
        (currentDF, colName) =>
          currentDF
            .withColumn(colName._1, when(currentDF(colName._1) isin (fittedLabels(colName._2).labels: _*), currentDF(colName._1))
              .otherwise(lit(null)))
      }.drop("replace")
    

    null

    替换新的/看不见的标签
    • 这些故意引入的空值被最频繁的计算机推算

    然而,这种设置非常难看。像CrossValidator这样的工具不再有效(因为我无法提供单一管道)

    如何访问管道中的拟合标签以构建一个Transformer,它处理将新值设置为null?

    您是否看到了更好的方法来完成处理新值? 我假设最频繁的估算是正确的,即对于具有大约90列的数据集,只有极少数列将包含看不见的标签。

1 个答案:

答案 0 :(得分:0)

我终于意识到这个功能需要驻留在管道中才能正常工作,即需要一个额外的新PipelineStage组件。