首页 文章

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

提问于
浏览
0

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

  • 预处理

  • 学习最频繁的项目
    每个分类列的

  • stringIndexer

  • 矢量汇编程序

  • 估算器,例如随机森林

假设(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 替换新的/看不见的标签

  • 这些故意引入的零点是由最频繁的imputer推算的

但是,这种设置非常难看 . 像CrossValidator这样的工具不再起作用(因为我无法提供单个管道)

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

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

1 回答

  • 0

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

相关问题