我正在构建多个Prophet模型,每个模型都传递给一个pandas_udf函数,该函数训练模型并将结果存储在MLflow中。
@pandas_udf(result_schema, PandasUDFType.GROUPED_MAP)
def forecast(data):
......
with mlflow.start_run() as run:
......
字符串
然后我称之为UDF,它为每个KPI训练模型。
df.groupBy('KPI').apply(forecast)
型
我们的想法是,对于每个KPI,模型将使用多个超参数进行训练,并将每个模型的最佳参数存储在MLflow中。我想使用Hyperopt使搜索更有效。
在这种情况下,我应该把目标函数放在哪里?因为每个模型的数据都传递给了UDF,我想在UDF中创建一个内部函数,每次运行都使用数据。这有意义吗?
1条答案
按热度按时间55ooxyrt1#
如果我没记错的话,你不能这样做,因为它会像嵌套的Spark执行一样,而且它不会与Spark一起工作。你需要改变方法,比如:
字符串
如果您需要分别调优每个KPI模型的参数-因为它将分别优化参数。
如果KPI就像模型的超参数,那么你可以将KPI列表包含到搜索空间中,并在执行训练和评估的函数中加载必要的数据。