mirror of
https://github.com/Azure/MachineLearningNotebooks.git
synced 2025-12-20 01:27:06 -05:00
69 lines
2.2 KiB
Python
69 lines
2.2 KiB
Python
import pandas as pd
|
|
import joblib
|
|
from azureml.core.model import Model
|
|
from azureml.train.automl.runtime.automl_explain_utilities import (
|
|
automl_setup_model_explanations,
|
|
)
|
|
import scipy as sp
|
|
|
|
|
|
def init():
|
|
|
|
global automl_model
|
|
global scoring_explainer
|
|
|
|
# Retrieve the path to the model file using the model name
|
|
# Assume original model is named original_prediction_model
|
|
automl_model_path = Model.get_model_path("automl_model")
|
|
scoring_explainer_path = Model.get_model_path("scoring_explainer")
|
|
|
|
automl_model = joblib.load(automl_model_path)
|
|
scoring_explainer = joblib.load(scoring_explainer_path)
|
|
|
|
|
|
def is_multi_dimensional(matrix):
|
|
if hasattr(matrix, "ndim") and matrix.ndim > 1:
|
|
return True
|
|
if hasattr(matrix, "shape") and matrix.shape[1]:
|
|
return True
|
|
return False
|
|
|
|
|
|
def convert_matrix(matrix):
|
|
if sp.sparse.issparse(matrix):
|
|
matrix = matrix.todense()
|
|
if is_multi_dimensional(matrix):
|
|
matrix = matrix.tolist()
|
|
return matrix
|
|
|
|
|
|
def run(raw_data):
|
|
# Get predictions and explanations for each data point
|
|
data = pd.read_json(raw_data, orient="records")
|
|
# Make prediction
|
|
predictions = automl_model.predict(data)
|
|
# Setup for inferencing explanations
|
|
automl_explainer_setup_obj = automl_setup_model_explanations(
|
|
automl_model, X_test=data, task="regression"
|
|
)
|
|
# Retrieve model explanations for engineered explanations
|
|
engineered_local_importance_values = scoring_explainer.explain(
|
|
automl_explainer_setup_obj.X_test_transform
|
|
)
|
|
engineered_local_importance_values = convert_matrix(
|
|
engineered_local_importance_values
|
|
)
|
|
|
|
# Retrieve model explanations for raw explanations
|
|
raw_local_importance_values = scoring_explainer.explain(
|
|
automl_explainer_setup_obj.X_test_transform, get_raw=True
|
|
)
|
|
raw_local_importance_values = convert_matrix(raw_local_importance_values)
|
|
|
|
# You can return any data type as long as it is JSON-serializable
|
|
return {
|
|
"predictions": predictions.tolist(),
|
|
"engineered_local_importance_values": engineered_local_importance_values,
|
|
"raw_local_importance_values": raw_local_importance_values,
|
|
}
|