如何处理多步 ML 管道中的评估

数据挖掘 机器学习模型 阿帕奇火花 管道
2022-02-21 18:57:03

Apache Spark 为我们提供了构建 ML 管道的管道。此外,我们可以评估管道中的回归量,现在这是我不明白的一点:如何应用于测试数据。

好的,假设我有一个数据框和一个回归器,我这样做:

  1. 拆分数据。
  2. 将回归器应用于训练数据。
  3. 将模型应用于测试数据以获得预测。
  4. 使用评估器(例如二元分类器)评估预测。

现在,假设我有 3 个步骤,最后一个是回归量。我不能这样做,因为前两个也需要应用于测试数据,如何处理?我的步骤会是什么样子?

1个回答

Apyspark.ml.PipelineModel是调用 a 的.fit()方法的结果pyspark.ml.PipelineTransformers这个估计器是一个和/或的序列,Estimators它们都有一个.transform()方法。当你调用的.transform()方法时pyspark.ml.PipelineModel——比如说,当你想使用训练好的模型进行预测时——中.transform()的每个对象的方法都会PipelineModel被依次调用。

换句话说,每个步骤的转换都是通过调用.transform()拟合管道的方法来应用的——API 为您执行此操作,或者更准确地说,为您提供了简洁的工具来根据需要执行此操作。

但是,您所说的内容稍微超出了此类对象的范围。训练/测试拆分发生在流水线之外,重要的是,出于方法论的原因。

PipelineModel数据准备步骤与估计器结合起来,但不包括训练操作。例如,拆分数据是您必须在Pipeline.

工作流程可能会:

将数据拆分为训练测试数据集。

定义您的数据准备步骤和回归估计器,并将它们组合成一个Pipeline.

在您的训练数据上训练整个管道:

fit_pipeline = Pipeline.fit(train)

对训练集进行预测:

train_preds = fit_pipeline.transform(train)

使用类似 apyspark.ml.evaluation.RegressionEvaluator来评估训练数据集的性能:

evaluator = RegressionEvaluator()
evaluator.evaluate(train_preds)

然后,您可以对测试数据集进行预测:

test_preds = fit_pipeline.transform(test)

并评估它们:

evaluator.evaluate(train_preds)

但是你已经有了这个完整的模型和数据准备对象,现在可以用来对类似结构的数据进行预测,称为fit_pipeline,它是 的一个实例pyspark.ml.PipelineModel