Trénování modelů STROJOVÉho učení s využitím rozhraní Python API služby Azure Databricks AutoML

Tento článek ukazuje, jak trénovat model pomocí Azure Databricks AutoML pomocí rozhraní API. Přečtěte si další informace o tom, co je AutoML?. Rozhraní Python API poskytuje funkce pro spuštění klasifikace, regrese a prognózování spuštění AutoML. Každé volání funkce trénuje sadu modelů a vygeneruje zkušební poznámkový blok pro každý model.

Následující kroky popisují obecně postup nastavení experimentu AutoML pomocí rozhraní API:

  1. Vytvořte poznámkový blok a připojte ho ke clusteru, na kterém běží Databricks Runtime ML.
  2. Určete, kterou tabulku chcete použít ze stávajícího zdroje dat, nebo nahrajte datový soubor do DBFS a vytvořte tabulku.
  3. Pokud chcete spustit spuštění AutoML, předejte název tabulky příslušné specifikaci rozhraní API: klasifikaci, regresi nebo prognózování.
  4. Po spuštění AutoML se v konzole zobrazí adresa URL experimentu MLflow. Pomocí této adresy URL můžete sledovat průběh spuštění. Aktualizujte experiment MLflow, abyste viděli pokusy, jakmile jsou dokončené.
  5. Po dokončení spuštění AutoML:
    • Pomocí odkazů v souhrnu výstupu přejděte do experimentu MLflow nebo do poznámkového bloku, který vygeneroval nejlepší výsledky.
    • Pomocí odkazu na poznámkový blok pro zkoumání dat získáte přehled o datech předávaných do AutoML. Tento poznámkový blok můžete také připojit ke stejnému clusteru a znovu spustit poznámkový blok a reprodukovat výsledky nebo provést další analýzu dat.
    • Pomocí souhrnného objektu vráceného voláním AutoML můžete prozkoumat další podrobnosti o zkušebních verzích nebo načíst model natrénovaný danou zkušební verzí. Přečtěte si další informace o objektu AutoMLSummary.
    • Naklonujte všechny vygenerované poznámkové bloky ze zkušebních verzí a znovu ho spusťte tak, že ho připojíte ke stejnému clusteru, abyste mohli reprodukovat výsledky. Můžete také provést potřebné úpravy a znovu je spustit, abyste mohli trénovat další modely a protokolovat je do stejného experimentu.

Požadavky

Viz Požadavky pro experimenty AutoML.

Specifikace klasifikace

Následující příklad kódu nakonfiguruje spuštění AutoML pro trénování klasifikačního modelu. Další parametry pro další přizpůsobení spuštění AutoML najdete v tématu Klasifikace a regresní parametry.

Poznámka:

Parametr max_trials je zastaralý v Databricks Runtime 10.4 ML a není podporován v Databricks Runtime 11.0 ML a vyšší. Slouží timeout_minutes k řízení doby trvání spuštění AutoML.

databricks.automl.classify(
  dataset: Union[pyspark.sql.DataFrame, pandas.DataFrame, pyspark.pandas.DataFrame, str],
  *,
  target_col: str,
  data_dir: Optional[str] = None,
  exclude_cols: Optional[List[str]] = None,                      # <DBR> 10.3 ML and above
  exclude_frameworks: Optional[List[str]] = None,                   # <DBR> 10.3 ML and above
  experiment_dir: Optional[str] = None,                             # <DBR> 10.4 LTS ML and above
  experiment_name: Optional[str] = None,                            # <DBR> 12.1 ML and above
  feature_store_lookups: Optional[List[Dict]] = None,               # <DBR> 11.3 LTS ML and above
  imputers: Optional[Dict[str, Union[str, Dict[str, Any]]]] = None, # <DBR> 10.4 LTS ML and above
  max_trials: Optional[int] = None,                                 # <DBR> 10.5 ML and below
  pos_label: Optional[Union[int, bool, str] = None,                 # <DBR> 11.1 ML and above
  primary_metric: str = "f1",
  time_col: Optional[str] = None,
  timeout_minutes: Optional[int] = None,
) -> AutoMLSummary

Specifikace regrese

Následující příklad kódu nakonfiguruje spuštění AutoML pro trénování regresního modelu. Další parametry pro další přizpůsobení spuštění AutoML najdete v tématu Klasifikace a regresní parametry.

Poznámka:

Parametr max_trials je zastaralý v Databricks Runtime 10.4 ML a není podporován v Databricks Runtime 11.0 ML a vyšší. Slouží timeout_minutes k řízení doby trvání spuštění AutoML.

databricks.automl.regress(
  dataset: Union[pyspark.sql.DataFrame, pandas.DataFrame, pyspark.pandas.DataFrame, str],
  *,
  target_col: str,
  data_dir: Optional[str] = None,
  exclude_cols: Optional[List[str]] = None,                      # <DBR> 10.3 ML and above
  exclude_frameworks: Optional[List[str]] = None,                   # <DBR> 10.3 ML and above
  experiment_dir: Optional[str] = None,                             # <DBR> 10.4 LTS ML and above
  experiment_name: Optional[str] = None,                            # <DBR> 12.1 ML and above
  feature_store_lookups: Optional[List[Dict]] = None,               # <DBR> 11.3 LTS ML and above
  imputers: Optional[Dict[str, Union[str, Dict[str, Any]]]] = None, # <DBR> 10.4 LTS ML and above
  max_trials: Optional[int] = None,                                 # <DBR> 10.5 ML and below
  primary_metric: str = "r2",
  time_col: Optional[str] = None,
  timeout_minutes: Optional[int] = None,
) -> AutoMLSummary

Specifikace prognózy

Následující příklad kódu nakonfiguruje spuštění AutoML pro trénování modelu prognózování. Další podrobnosti o parametrech spuštění AutoML najdete v tématu Prognózování parametrů. Aby bylo možné použít funkci Auto-ARIMA, musí mít časová řada běžnou frekvenci (to znamená, že interval mezi všemi dvěma body musí být stejný v průběhu časové řady). Frekvence se musí shodovat s jednotkou frekvence zadanou ve volání rozhraní API. AutoML zpracovává chybějící kroky času vyplněním těchto hodnot předchozí hodnotou.

databricks.automl.forecast(
  dataset: Union[pyspark.sql.DataFrame, pandas.DataFrame, pyspark.pandas.DataFrame, str],
  *,
  target_col: str,
  time_col: str,
  country_code: str = "US",                                         # <DBR> 12.0 ML and above
  data_dir: Optional[str] = None,
  exclude_frameworks: Optional[List[str]] = None,
  experiment_dir: Optional[str] = None,
  experiment_name: Optional[str] = None,                            # <DBR> 12.1 ML and above
  feature_store_lookups: Optional[List[Dict]] = None,               # <DBR> 12.2 LTS ML and above
  frequency: str = "D",
  horizon: int = 1,
  identity_col: Optional[Union[str, List[str]]] = None,
  output_database: Optional[str] = None,                            # <DBR> 10.5 ML and above
  primary_metric: str = "smape",
  timeout_minutes: Optional[int] = None,
) -> AutoMLSummary

Klasifikační a regresní parametry

Poznámka:

U problémů klasifikace a regrese můžete:

  • Určete, které sloupce se mají zahrnout do trénování.
  • Vyberte vlastní metody imputace.
Název pole Typ Popis
datová sada str pandas. Datový rámec pyspark. Datový rámec pyspark.sql.DataFrame Název vstupní tabulky nebo datový rámec, který obsahuje trénovací funkce a cíl

Název tabulky může být ve formátu .. nebo "." pro tabulky jiného katalogu než Unity
target_col Str Název sloupce pro cílový popisek
data_dir str of format
dbfs:/<folder-name>
(Volitelné) Cesta DBFS použitá k uložení trénovací datové sady Tato cesta je viditelná pro ovladače i pracovní uzly.

Databricks doporučuje ponechat toto pole prázdné, takže AutoML může trénovací datovou sadu uložit jako artefakt MLflow.

Pokud je zadána vlastní cesta, datová sada nedědí přístupová oprávnění experimentu AutoML.
exclude_cols List[str] (Volitelné) Seznam sloupců, které se mají při výpočtech AutoML ignorovat

Výchozí hodnota: []
architektury exclude_ List[str] (Volitelné) Seznam architektur algoritmů, které By AutoML nemělo brát v úvahu při vývoji modelů. Možné hodnoty: prázdný seznam nebo jeden nebo více "sklearn", "lightgbm", "xgboost".

Výchozí hodnota: [] (považují se za všechny architektury)
experiment_dir Str (Volitelné) Cesta k adresáři v pracovním prostoru pro uložení vygenerovaných poznámkových bloků a experimentů

Výchozí: /Users/<username>/databricks_automl/
experiment_name Str (Volitelné) Název experimentu MLflow, který autoML vytvoří.

Výchozí hodnota: Název se automaticky vygeneruje.
feature_store_ vyhledávání Seznam[Diktování] (Volitelné) Seznamslovníkch Platné klíče v každém slovníku jsou:

* table_name (str): Povinné. Název tabulky funkcí
* lookup_key (seznam nebo str): Povinné. Názvy sloupců, které se použijí jako klíč při připojování tabulky funkcí s daty předanými v tabulce funkcí
dataset Param. Pořadí názvů sloupců musí odpovídat pořadí primárních klíčů tabulky funkcí.
* timestamp_lookup_key (str): Povinný argument, pokud je zadaná tabulka funkcí časové řady. Název sloupce, který se má použít při vyhledávání v tabulce funkcí k určitému bodu v čase s daty předanými v parametru dataset .

Výchozí hodnota: []
imputers Dict[str, Union[str, Dict[str, Any]]] (Volitelné) Slovník, kde každý klíč je název sloupce a každá hodnota je řetězec nebo slovník popisující strategii imputace. Pokud je hodnota zadaná jako řetězec, musí být jednou z "střední", "medián" nebo "most_frequent". Pokud chcete napsat známou hodnotu, zadejte hodnotu jako slovník.
{"strategy": "constant", "fill_value": <desired value>}. Jako slovníky můžete také zadat možnosti řetězce, například {"strategy": "mean"}.

Pokud sloupec neobsahuje žádnou strategii imputace, AutoML vybere výchozí strategii na základě typu a obsahu sloupce. Pokud zadáte metodu bez výchozí imputace, AutoML neprovádí detekci sémantických typů.

Výchozí: {}
max_trials int (Volitelné) Maximální počet pokusů, které se mají spustit.

Tento parametr je k dispozici v Databricks Runtime 10.5 ML a níže, ale je zastaralý od databricks Runtime 10.3 ML. Ve službě Databricks Runtime 11.0 ML a vyšší není tento parametr podporován.

Výchozí hodnota: 20

Pokud timeout_minutes=None, autoML spustí maximální počet pokusů.
pos_label Union[int, bool, str] (Pouze klasifikace) Kladná třída. To je užitečné pro výpočet metrik, jako je přesnost a úplnost. Měla by být zadána pouze pro problémy s binární klasifikací.
primary_metric Str Metrika použitá k vyhodnocení a hodnocení výkonu modelu

Podporované metriky pro regresi: "r2" (výchozí), "mae", "rmse", "mse"

Podporované metriky pro klasifikaci: "f1" (výchozí), "log_loss", "přesnost", "přesnost", "přesnost", "roc_auc"
time_col Str K dispozici ve službě Databricks Runtime 10.1 ML a novějších.

(Volitelné) Název sloupce pro sloupec času

Pokud je k dispozici, AutoML se pokusí datovou sadu rozdělit na trénovací, ověřovací a testovací sady chronologicky, přičemž nejstarší body jako trénovací data a nejnovější body se pokusí rozdělit jako testovací sadu.

Akceptované typy sloupců jsou časové razítko a celé číslo. S Modulem Databricks Runtime 10.2 ML a novějším jsou podporovány také řetězcové sloupce. Pokud je typ sloupce řetězec, AutoML se ho pokusí převést na časové razítko pomocí sémantické detekce. Pokud převod selže, spuštění AutoML selže.
timeout_minutes int (Volitelné) Maximální doba čekání na dokončení zkušebních verzí AutoML Delší časové limity umožňují službě AutoML spouštět více pokusů a identifikovat model s vyšší přesností.

Výchozí hodnota: 120 minut

Minimální hodnota: 5 minut

Pokud je časový limit příliš krátký, aby bylo možné dokončit aspoň jednu zkušební verzi, zobrazí se chyba.

Parametry prognózování

Název pole Typ Popis
datová sada Str

Pandy. Datový rámec pyspark. Datový rámec pyspark.sql.DataFrame
Název vstupní tabulky nebo datový rámec, který obsahuje trénovací funkce a cíl

Název tabulky může být ve formátu .. nebo "." pro tabulky jiného katalogu než Unity
target_col Str Název sloupce pro cílový popisek
time_col Str Název sloupce času pro prognózování
frequency Str Frekvence časových řad pro prognózování Jedná se o období, ve kterém se očekávají události. Výchozí nastavení je D nebo denní data. Pokud data mají jinou frekvenci, nezapomeňte nastavení změnit.

Možné hodnoty:

"W" (týdny)

"D" / "days" / "day"

"hours" / "hour" / "hr" / "h"

"m" / "minute" / "min" / "minutes" / "T"

"S" / "seconds" / "sec" / "second"

Následující informace jsou k dispozici pouze pro Databricks Runtime 12.0 ML a vyšší:

"M" / "month" / "months"

"Q" / "quarter" / "quarters"

"Y" / "year" / "years"

Výchozí hodnota: "D"
Horizon int Počet období do budoucnosti, pro která se mají vrátit prognózy. Jednotky jsou frekvence časových řad. Výchozí hodnota: 1
data_dir str of format
dbfs:/<folder-name>
(Volitelné) Cesta DBFS použitá k uložení trénovací datové sady Tato cesta je viditelná pro ovladače i pracovní uzly.

Databricks doporučuje ponechat toto pole prázdné, takže AutoML může trénovací datovou sadu uložit jako artefakt MLflow.

Pokud je zadána vlastní cesta, datová sada nedědí přístupová oprávnění experimentu AutoML.
architektury exclude_ List[str] (Volitelné) Seznam architektur algoritmů, které By AutoML nemělo brát v úvahu při vývoji modelů. Možné hodnoty: prázdný seznam nebo jeden nebo více "proroků", "arima". Výchozí hodnota: [] (považují se za všechny architektury)
experiment_dir Str (Volitelné) Cesta k adresáři v pracovním prostoru pro uložení vygenerovaných poznámkových bloků a experimentů

Výchozí: /Users/<username>/databricks_automl/
experiment_name Str (Volitelné) Název experimentu MLflow, který autoML vytvoří.

Výchozí hodnota: Název se automaticky vygeneruje.
feature_store_ vyhledávání Seznam[Diktování] (Volitelné) Seznamslovníkch Platné klíče v každém slovníku jsou:

* table_name (str): Povinné. Název tabulky funkcí
* lookup_key (seznam nebo str): Povinné. Názvy sloupců, které se použijí jako klíč při připojování tabulky funkcí s daty předanými v tabulce funkcí
dataset Param. Pořadí názvů sloupců musí odpovídat pořadí primárních klíčů tabulky funkcí.
* timestamp_lookup_key (str): Povinný argument, pokud je zadaná tabulka funkcí časové řady. Název sloupce, který se má použít při vyhledávání v tabulce funkcí k určitému bodu v čase s daty předanými v parametru dataset .

Výchozí hodnota: []
identity_col Union[str, list] (Volitelné) Sloupce, které identifikují časovou řadu pro prognózování s více řadami AutoML seskupí podle těchto sloupců a sloupce času pro prognózování.
output_database Str (Volitelné) Pokud je k dispozici, AutoML ukládá předpovědi nejlepšího modelu do nové tabulky v zadané databázi.

Výchozí: Předpovědi se neuloží.
primary_metric Str Metrika použitá k vyhodnocení a hodnocení výkonu modelu Podporované metriky: "smape"(default) "mse", "rmse", "mae" nebo "mdape".
timeout_minutes int (Volitelné) Maximální doba čekání na dokončení zkušebních verzí AutoML Delší časové limity umožňují službě AutoML spouštět více pokusů a identifikovat model s vyšší přesností.

Výchozí hodnota: 120 minut

Minimální hodnota: 5 minut

Pokud je časový limit příliš krátký, aby bylo možné dokončit aspoň jednu zkušební verzi, zobrazí se chyba.
country_code Str K dispozici ve službě Databricks Runtime 12.0 ML a vyšší. Podporuje pouze model prognózování Proroka.

(Volitelné) Dvoupísmenný kód země označující svátky země, které má model prognózy použít. Pokud chcete ignorovat svátky, nastavte tento parametr na prázdný řetězec (""). Podporované země.

Výchozí hodnota: USA (USA svátky).

Vrátí

AutoMLSummary

Souhrnný objekt pro spuštění AutoML, který popisuje metriky, parametry a další podrobnosti pro každou zkušební verzi. Tento objekt také použijete k načtení modelu natrénovaného konkrétní zkušební verzí.

Vlastnost Type Popis
experiment mlflow.entities.Experiment Experiment MLflow použitý k protokolování pokusů.
zkušební verze List[TrialInfo] Seznam obsahující informace o všech spuštěných zkušebních verzích.
best_trial Zkušební verzeInfo Informace o zkušební verzi, která způsobila nejlepší vážené skóre pro primární metriku.
metric_distribution Str Rozdělení vážených skóre pro primární metriku napříč všemi pokusy
output_table_name Str Používá se pouze s prognózováním a pouze v případě, že je k dispozici output_database. Název tabulky v output_database obsahující předpovědi modelu

TrialInfo

Souhrnný objekt pro každou jednotlivou zkušební verzi

Vlastnost Type Popis
notebook_path Volitelné[str] Cesta k vygenerovanému poznámkovému bloku pro tuto zkušební verzi v pracovním prostoru. Pro klasifikaci a regresi je tato hodnota nastavena pouze pro nejlepší zkušební verzi, zatímco všechny ostatní pokusy mají hodnotu nastavenou na None. Pro prognózování je tato hodnota k dispozici pro všechny zkušební verze.
notebook_url Volitelné[str] Adresa URL vygenerovaného poznámkového bloku pro tuto zkušební verzi Pro klasifikaci a regresi je tato hodnota nastavena pouze pro nejlepší zkušební verzi, zatímco všechny ostatní pokusy mají hodnotu nastavenou na None. Pro prognózování je tato hodnota k dispozici pro všechny zkušební verze.
artifact_uri Volitelné[str] Identifikátor URI artefaktu MLflow pro vygenerovaný poznámkový blok.
mlflow_run_id Str ID spuštění MLflow přidružené k tomuto zkušebnímu spuštění.
metriky Dikt[str, float] Metriky zaprotokolované v MLflow pro tuto zkušební verzi.
params Dikt[str, str] Parametry protokolované v MLflow, které byly použity pro tuto zkušební verzi.
model_path Str Adresa URL artefaktu MLflow modelu natrénovaného v této zkušební verzi.
model_description Str Stručný popis modelu a hyperparametrů použitých pro trénování tohoto modelu.
doba trvání Str Doba trénování v minutách.
preprocesory Str Popis předzpracovačů spuštěných před trénováním modelu
evaluation_metric_score float (číslo s plovoucí řádovou čárkou) Skóre primární metriky vyhodnocené pro ověřovací datovou sadu
metoda Popis
load_model() Načtěte model vygenerovaný v této zkušební verzi a zaprotokolujte jako artefakt MLflow.

Import poznámkového bloku

Pokud chcete importovat poznámkový blok uložený jako artefakt MLflow, použijte databricks.automl.import_notebook rozhraní Python API.

def import_notebook(artifact_uri: str, path: str, overwrite: bool = False) -> ImportNotebookResult:
    """
    Import a trial notebook, saved as an MLflow artifact, into the workspace.

    :param artifact_uri: The URI of the MLflow artifact that contains the trial notebook.
    :param path: The path in the Databricks workspace where the notebook should be imported. This must be an absolute path. The directory will be created if it does not exist.
    :param overwrite: Whether to overwrite the notebook if it already exists. It is `False` by default.

    :return: ImportNotebookResult contains two fields, `path` and `url`, referring to the imported notebook
    """

Příklad použití:

summary = databricks.automl.classify(...)
result = databricks.automl.import_notebook(summary.trials[5].artifact_uri, "/Users/you@yourcompany.com/path/to/directory")
print(result.path)
print(result.url)

Registrace a nasazení modelu

Trénovaný model AutoML můžete zaregistrovat a nasadit stejně jako jakýkoli zaregistrovaný model v registru modelů MLflow, viz protokol, načtení, registrace a nasazení modelů MLflow.

Žádný modul s názvem pandas.core.indexes.numeric

Při poskytování modelu vytvořeného pomocí AutoML s obsluhou modelů se může zobrazit chyba: No module named 'pandas.core.indexes.numeric.

Důvodem je nekompatibilní pandas verze mezi AutoML a modelem obsluhující prostředí koncového bodu. Tuto chybu můžete vyřešit spuštěním skriptu add-pandas-dependency.py. Skript upraví requirements.txt protokolovaný model tak conda.yaml , aby zahrnoval příslušnou pandas verzi závislostí: pandas==1.5.3.

  1. Upravte skript tak, aby zahrnoval run_id běh MLflow, ve kterém byl váš model protokolován.
  2. Opětovná registrace modelu do registru modelů MLflow
  3. Zkuste obsluhovat novou verzi modelu MLflow.

Příklady poznámkových bloků

Projděte si tyto poznámkové bloky a začněte pracovat s AutoML.

Následující poznámkový blok ukazuje, jak provádět klasifikaci pomocí AutoML.

Ukázkový poznámkový blok klasifikace AutoML

Získat poznámkový blok

Následující poznámkový blok ukazuje, jak provést regresi pomocí AutoML.

Ukázkový poznámkový blok regrese AutoML

Získat poznámkový blok

Následující poznámkový blok ukazuje, jak provádět prognózy pomocí AutoML.

Ukázkový poznámkový blok prognózy AutoML

Získat poznámkový blok

Následující poznámkový blok ukazuje, jak vytrénovat model ML pomocí tabulek funkcí AutoML a Úložiště funkcí.

Experiment AutoML s ukázkovým poznámkovým blokem úložiště funkcí

Získat poznámkový blok