Apache Spark 为我们提供了构建 ML 管道的管道。此外,我们可以评估管道中的回归量,现在这是我不明白的一点:如何应用于测试数据。
好的,假设我有一个数据框和一个回归器,我这样做:
- 拆分数据。
- 将回归器应用于训练数据。
- 将模型应用于测试数据以获得预测。
- 使用评估器(例如二元分类器)评估预测。
现在,假设我有 3 个步骤,最后一个是回归量。我不能这样做,因为前两个也需要应用于测试数据,如何处理?我的步骤会是什么样子?
Apache Spark 为我们提供了构建 ML 管道的管道。此外,我们可以评估管道中的回归量,现在这是我不明白的一点:如何应用于测试数据。
好的,假设我有一个数据框和一个回归器,我这样做:
现在,假设我有 3 个步骤,最后一个是回归量。我不能这样做,因为前两个也需要应用于测试数据,如何处理?我的步骤会是什么样子?
Apyspark.ml.PipelineModel是调用 a 的.fit()方法的结果pyspark.ml.Pipeline。Transformers这个估计器是一个和/或的序列,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。