当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python pyspark load_model用法及代码示例


本文简要介绍 pyspark.pandas.mlflow.load_model 的用法。

用法:

pyspark.pandas.mlflow.load_model(model_uri: str, predict_type: Union[str, type, numpy.dtype, pandas.core.dtypes.base.ExtensionDtype] = 'infer') → pyspark.pandas.mlflow.PythonModelWrapper

将 MLflow 模型加载到可用于 pandas 和 pandas-on-Spark DataFrame 的包装器中。

参数

model_uristr

指向模型的 URI。有关更多详细信息,请参阅 MLflow 文档。

predict_typepython 基本类型、numpy 基本类型、Spark 类型或‘infer’。

这是调用模型的预测函数时预期的返回类型。如果指定了‘infer’,包装器将尝试根据模型类型自动确定返回类型。

返回

PythonModelWrapper

MLflow PythonModel 对象的包装器。该包装器应遵循 mlflow.pyfunc.PythonModel 的接口。

注意

目前,模型预测只能与现有 DataFrame 合并。其他列必须手动连接。例如,此代码将不起作用:

>>> df = ps.DataFrame({"x1": [2.0], "x2": [3.0], "z": [-1]})
>>> features = df[["x1", "x2"]]
>>> y = model.predict(features)
>>> # Works:
>>> features["y"] = y   
>>> # Will fail with a message about dataframes not aligned.
>>> df["y"] = y

当前的解决方法是使用 .merge() 函数,将特征值用作合并键。

>>> features['y'] = y
>>> everything = df.merge(features, on=['x1', 'x2'])
>>> everything
    x1   x2  z         y
0  2.0  3.0 -1  1.376932

例子

这是一个完整的示例,它使用 scikit-learn 创建模型并使用

机器学习流。然后将该模型作为可应用于pandas-on-Spark 数据帧的预测器加载。

我们首先初始化我们的 MLflow 环境:

>>> from mlflow.tracking import MlflowClient, set_tracking_uri
>>> import mlflow.sklearn
>>> from tempfile import mkdtemp
>>> d = mkdtemp("pandas_on_spark_mlflow")
>>> set_tracking_uri("file:%s"%d)
>>> client = MlflowClient()
>>> exp = mlflow.create_experiment("my_experiment")
>>> mlflow.set_experiment("my_experiment")

我们的目标是使用简单的线性回归器来学习这个数值函数。

>>> from sklearn.linear_model import LinearRegression
>>> train = pd.DataFrame({"x1": np.arange(8), "x2": np.arange(8)**2,
...                       "y": np.log(2 + np.arange(8))})
>>> train_x = train[["x1", "x2"]]
>>> train_y = train[["y"]]
>>> with mlflow.start_run():
...     lr = LinearRegression()
...     lr.fit(train_x, train_y)
...     mlflow.sklearn.log_model(lr, "model")
LinearRegression(...)

现在我们的模型是使用 MLflow 记录的,我们将其加载返回并将其应用于 pandas-on-Spark 数据帧:

>>> from pyspark.pandas.mlflow import load_model
>>> run_info = client.list_run_infos(exp)[-1]
>>> model = load_model("runs:/{run_id}/model".format(run_id=run_info.run_uuid))
>>> prediction_df = ps.DataFrame({"x1": [2.0], "x2": [4.0]})
>>> prediction_df["prediction"] = model.predict(prediction_df)
>>> prediction_df
    x1   x2  prediction
0  2.0  4.0    1.355551

该模型也适用于 pandas DataFrames 正如预期的那样:

>>> model.predict(prediction_df[["x1", "x2"]].to_pandas())
array([[1.35555142]])

相关用法


注:本文由纯净天空筛选整理自spark.apache.org大神的英文原创作品 pyspark.pandas.mlflow.load_model。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。