pyspark GBTRegressor 对象在加载模型后没有属性“转换”

Posted

技术标签:

【中文标题】pyspark GBTRegressor 对象在加载模型后没有属性“转换”【英文标题】:pyspark GBTRegressor object has no attribute 'transform' after loading model 【发布时间】:2020-08-17 17:01:46 【问题描述】:

我收到了一个预训练的 pyspark 模型 (GBTRegressor),但我无法在数据集上使用它来获得预测。我看过一些关于使用 Pipeline 与 PipelineModel 的帖子,但在这种情况下,它只是回归量对象,我无法使用 PipelineModel 加载它。

我能够成功加载模型:

model = GTBRegressor.load(model_path)
type(model)
'pyspark.ml.regression.GBTRegressor'

但是当我打电话给model.transform(test_df) 我得到了

AttributeError: 'GBTRegressor' object has no attribute 'transform'

我尝试将模型对象放入 Pipeline 和 PipelineModel 中,但没有任何效果。我也在源码中看到了这个类:

class GBTRegressionModel(TreeEnsembleModels):
    """
    Model fitted by GBTRegressor.

    .. versionadded:: 1.4.0
    """ 

但我无法使用 GBTRegressionModel.load(model_path) 加载模型

如果有人能花时间帮助我找出我在这里做错了什么,将不胜感激!运行了整整一周,我想避免再次这样做。如果需要我提供更多信息来诊断问题,请告诉我。

【问题讨论】:

为什么不能使用GBTRegressionModel.load(model_path)加载模型? 我收到错误:IllegalArgumentException: requirement failed: Error loading metadata: Expected class name org.apache.spark.ml.regression.GBTRegressionModel but found class name org.apache.spark.ml.regression.GBTRegressor 【参考方案1】:

我发现答案是由于代码中的一个错误,未训练的 GBTRegressor 对象被保存而不是训练的对象,因此它没有变换属性。

【讨论】:

以上是关于pyspark GBTRegressor 对象在加载模型后没有属性“转换”的主要内容,如果未能解决你的问题,请参考以下文章

在 Rails 中,如何在加载子对象时自动加载父对象?

使用对象的wait()方法需要注意什么?

pyspark对应的scala代码PythonRDD对象

如何在 PySpark 的分组对象中插入一列?

pyspark:TypeError:'float'对象不可迭代

PySpark - RDD 中对象的时间重叠