Sdílet prostřednictvím


predict_onnx_fl()

Funkce predict_onnx_fl() je uživatelem definovaná funkce (UDF), která předpovídá pomocí existujícího natrénovaného modelu strojového učení. Tento model byl převeden do formátu ONNX , serializován na řetězec a uložen ve standardní tabulce.

Požadavky

  • V clusteru musí být povolený modul plug-in Pythonu. To se vyžaduje pro vložený Python použitý ve funkci.
  • V databázi musí být povolený modul plug-in Pythonu. To se vyžaduje pro vložený Python použitý ve funkci.

Syntax

T | invoke predict_onnx_fl(, models_tbl, model_name, features_colspred_col)

Přečtěte si další informace o konvencích syntaxe.

Parametry

Název Typ Vyžadováno Popis
models_tbl string ✔️ Název tabulky, která obsahuje všechny serializované modely. Tabulka musí obsahovat následující sloupce:
name: název modelu
timestamp: čas trénování modelu
model: řetězcová reprezentace serializovaného modelu
model_name string ✔️ Název konkrétního modelu, který se má použít.
features_cols synamické ✔️ Pole obsahující názvy sloupců funkcí, které model používá k predikci.
pred_col string ✔️ Název sloupce, ve kterém jsou uloženy předpovědi.

Definice funkce

Funkci můžete definovat tak, že buď vložíte její kód jako funkci definovanou dotazem, nebo ji vytvoříte jako uloženou funkci v databázi, a to následujícím způsobem:

Definujte funkci pomocí následujícího příkazu let. Nejsou vyžadována žádná oprávnění.

Důležité

Příkaz let nemůže běžet samostatně. Za ním musí následovat příkaz tabulkového výrazu. Pokud chcete spustit funkční příklad , predict_onnx_fl()podívejte se na příklad.

let predict_onnx_fl=(samples:(*), models_tbl:(name:string, timestamp:datetime, model:string), model_name:string, features_cols:dynamic, pred_col:string)
{
    let model_str = toscalar(models_tbl | where name == model_name | top 1 by timestamp desc | project model);
    let kwargs = bag_pack('smodel', model_str, 'features_cols', features_cols, 'pred_col', pred_col);
    let code = ```if 1:

    import binascii

    smodel = kargs["smodel"]
    features_cols = kargs["features_cols"]
    pred_col = kargs["pred_col"]
    bmodel = binascii.unhexlify(smodel)

    features_cols = kargs["features_cols"]
    pred_col = kargs["pred_col"]

    import onnxruntime as rt
    sess = rt.InferenceSession(bmodel)
    input_name = sess.get_inputs()[0].name
    label_name = sess.get_outputs()[0].name
    df1 = df[features_cols]
    predictions = sess.run([label_name], {input_name: df1.values.astype(np.float32)})[0]

    result = df
    result[pred_col] = pd.DataFrame(predictions, columns=[pred_col])

    ```;
    samples | evaluate python(typeof(*), code, kwargs)
};
// Write your query to use the function here.

Příklad

Následující příklad používá operátor invoke ke spuštění funkce.

Pokud chcete použít funkci definovanou dotazem, vyvoláte ji po definici vložené funkce.

let predict_onnx_fl=(samples:(*), models_tbl:(name:string, timestamp:datetime, model:string), model_name:string, features_cols:dynamic, pred_col:string)
{
    let model_str = toscalar(models_tbl | where name == model_name | top 1 by timestamp desc | project model);
    let kwargs = bag_pack('smodel', model_str, 'features_cols', features_cols, 'pred_col', pred_col);
    let code = ```if 1:

    import binascii

    smodel = kargs["smodel"]
    features_cols = kargs["features_cols"]
    pred_col = kargs["pred_col"]
    bmodel = binascii.unhexlify(smodel)

    features_cols = kargs["features_cols"]
    pred_col = kargs["pred_col"]

    import onnxruntime as rt
    sess = rt.InferenceSession(bmodel)
    input_name = sess.get_inputs()[0].name
    label_name = sess.get_outputs()[0].name
    df1 = df[features_cols]
    predictions = sess.run([label_name], {input_name: df1.values.astype(np.float32)})[0]

    result = df
    result[pred_col] = pd.DataFrame(predictions, columns=[pred_col])

    ```;
    samples | evaluate python(typeof(*), code, kwargs)
};
//
// Predicts room occupancy from sensors measurements, and calculates the confusion matrix
//
// Occupancy Detection is an open dataset from UCI Repository at https://archive.ics.uci.edu/ml/datasets/Occupancy+Detection+
// It contains experimental data for binary classification of room occupancy from Temperature,Humidity,Light and CO2.
// Ground-truth labels were obtained from time stamped pictures that were taken every minute
//
OccupancyDetection 
| where Test == 1
| extend pred_Occupancy=bool(0)
| invoke predict_onnx_fl(ML_Models, 'ONNX-Occupancy', pack_array('Temperature', 'Humidity', 'Light', 'CO2', 'HumidityRatio'), 'pred_Occupancy')
| summarize n=count() by Occupancy, pred_Occupancy

Výstup

Obsazení pred_Occupancy n
TRUE PRAVDA 3006
FALSE TRUE 112
TRUE FALSE 15
FALSE FALSE 9284

Tato funkce není podporovaná.