當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。