Jak Funguje Azure Databricks AutoML

Tento článek podrobně popisuje, jak Funguje Azure Databricks AutoML a její implementace konceptů, jako je chybějící imputace hodnot a vzorkování velkých dat.

Databricks AutoML provádí následující:

  1. Připraví datovou sadu pro trénování modelu. AutoML například provádí nevyváženou detekci dat pro problémy klasifikace před trénováním modelu.
  2. Iteruje trénování a ladění více modelů, kde se každý model vytváří z opensourcových komponent a dá se snadno upravovat a integrovat do kanálů strojového učení.
    • AutoML automaticky distribuuje pokusy o ladění hyperparametrů mezi pracovní uzly clusteru.
    • Pokud používáte Databricks Runtime 9.1 LTS ML nebo novější, AutoML automaticky vzorkuje datovou sadu, pokud je příliš velká, aby se vešla do paměti jednoho pracovního uzlu. Viz Vzorkování velkých datových sad.
  3. Vyhodnocuje modely založené na algoritmech z balíčků scikit-learn, xgboost, LightGBM, Prophet a ARIMA .
  4. Zobrazí výsledky a poskytne poznámkový blok Pythonu se zdrojovým kódem pro každé zkušební spuštění, abyste mohli kód zkontrolovat, reprodukovat a upravit. AutoML také vypočítá souhrnné statistiky datové sady a uloží tyto informace do poznámkového bloku, který si můžete prohlédnout později.

Algoritmy AutoML

Databricks AutoML trénuje a vyhodnocuje modely na základě algoritmů v následující tabulce.

Poznámka:

U klasifikačních a regresních modelů je rozhodovací strom, náhodné doménové struktury, logistická regrese a lineární regrese s algoritmy stochastického gradientního sestupu založená na scikit-learn.

Modely klasifikace Regresní modely Modely prognózování
Rozhodovací stromy Rozhodovací stromy Prorok
Náhodné doménové struktury Náhodné doménové struktury Auto-ARIMA (k dispozici v Databricks Runtime 10.3 ML a novější.)
Logistická regrese Lineární regrese se stochastickým gradientním sestupem
XGBoost XGBoost
LightGBM LightGBM

Podporované datové typy funkcí

Níže uvedené typy funkcí nejsou podporované. Obrázky se například nepodporují.

Podporují se následující typy funkcí:

  • Číselné (ByteType, , IntegerTypeShortTypeLongType, , FloatTypea )DoubleType
  • Logická hodnota
  • Řetězec (kategorický nebo anglický text)
  • Časové razítka (TimestampType, DateType)
  • ArrayType[Numeric] (Databricks Runtime 10.4 LTS ML a vyšší)
  • DecimalType (Databricks Runtime 11.3 LTS ML a vyšší)

Rozdělení dat do trénovacích/ověřovacích/testovacích sad

S modulem Databricks Runtime 10.4 LTS ML a novějším můžete zadat časový sloupec, který se má použít pro rozdělení trénovacích/ověřovacích/testovacích dat pro problémy klasifikace a regrese. Pokud zadáte tento sloupec, datová sada se rozdělí na trénování, ověřování a testovací sady podle času. Nejstarší body se používají pro trénování, další nejstarší pro ověření a nejnovější body se používají jako testovací sada. Časový sloupec musí být časové razítko, řetězec nebo celočíselné sloupce.

Vzorkování velkých datových sad

Poznámka:

Vzorkování se nevztahuje na prognózování problémů.

I když AutoML distribuuje pokusy o ladění hyperparametrů napříč pracovními uzly clusteru, každý model se vytrénuje na jednom pracovním uzlu.

AutoML automaticky odhaduje paměť potřebnou k načtení a trénovat datovou sadu a v případě potřeby ji vzorkuje.

V Databricks Runtime 9.1 LTS ML prostřednictvím Databricks Runtime 10.4 LTS ML nezávisí na typu uzlu clusteru ani na množství paměti na každém uzlu.

V Databricks Runtime 11.x ML:

  • Zlomek vzorkování se zvýší u pracovních uzlů, které mají více paměti na jádro. Velikost vzorku můžete zvětšit výběrem typu instance optimalizované pro paměť.
  • Velikost vzorku můžete dále zvětšit výběrem větší hodnoty spark.task.cpus v konfiguraci Sparku pro cluster. Výchozí nastavení je 1; Maximální hodnota je počet procesorů na pracovním uzlu. Když tuto hodnotu zvětšíte, velikost vzorku je větší, ale paralelně běží méně pokusů. Například v počítači se 4 jádry a celkovou pamětí RAM 64 GB spouští výchozí spark.task.cpus=1 4 zkušební verze na pracovní proces s každou zkušební verzí omezenou na 16 GB paměti RAM. Pokud nastavíte spark.task.cpus=4, každý pracovní proces spustí jenom jednu zkušební verzi, ale tato zkušební verze může používat 64 GB paměti RAM.

Ve službě Databricks Runtime 12.2 LTS ML a novějších může AutoML trénovat na větší datové sady přidělením více jader procesoru na trénovací úlohu. Velikost vzorku můžete zvětšit výběrem velikosti instance s větší celkovou pamětí.

V Databricks Runtime 11.3 LTS ML a novějším, pokud AutoML vzorkovala datovou sadu, zobrazí se zlomek vzorkování na kartě Přehled v uživatelském rozhraní.

Pro problémy klasifikace používá AutoML metodu PySpark sampleBypro stratifikované vzorkování k zachování distribuce cílového popisku.

Pro regresní problémy používá AutoML metodu PySparksample.

Podpora nevyvážené datové sady pro problémy klasifikace

Pokud AutoML v Databricks Runtime 11.3 LTS ML a vyšší zjistí, že datová sada je nevyvážená, pokusí se snížit nerovnováhu trénovací datové sady tak, že převzorkuje hlavní třídy a přidá váhy tříd. AutoML vyrovnává pouze trénovací datovou sadu a nevyrovná testovací a ověřovací datové sady. Tím zajistíte, že výkon modelu se vždy vyhodnotí u neprodušné datové sady s distribucí skutečné vstupní třídy.

K vyvážení nevyrovnané trénovací datové sady používá AutoML váhy tříd, které jsou inverzní související s stupněm, kterým je daná třída převzorkována. Pokud například trénovací datová sada s 100 vzorky obsahuje 95 vzorků patřících do třídy A a 5 vzorků patřících do třídy B, AutoML tuto nerovnováhu snižuje snížením převzorkování třídy A na 70 vzorků, což je downsampling class A o poměr 70/95 nebo 0,736 a současně udržuje počet vzorků ve třídě B na 5. Aby se zajistilo, že je konečný model správně kalibrován a rozdělení pravděpodobnosti výstupu modelu je stejné jako u vstupu, AutoML vertikálně navyšuje váhu třídy pro třídu A poměrem 1/0,736 nebo 1,358 při zachování hmotnosti třídy B jako 1. AutoML pak použije tyto váhy tříd v trénování modelu jako parametr, aby se zajistilo, že vzorky z každé třídy budou při trénování modelu správně vážené.

Detekce sémantických typů

Poznámka:

  • Detekce sémantických typů se nevztahuje na prognózování problémů.
  • AutoML neprovádí detekci sémantických typů pro sloupce, které mají zadané vlastní metody imputace.

S modulem Databricks Runtime 9.1 LTS ML a novějším se AutoML pokusí zjistit, jestli mají sloupce sémantický typ, který se liší od datového typu Spark nebo pandas ve schématu tabulky. AutoML považuje tyto sloupce za rozpoznaný sémantický typ. Tyto detekce jsou co nejlepší a v některých případech můžou chybět existence sémantických typů. Pomocí poznámek můžete také ručně nastavit sémantický typ sloupce nebo autoML říct, aby se u sloupce nepoužádá detekce sémantických typů.

AutoML konkrétně provádí tyto úpravy:

  • Řetězcové a celočíselné sloupce, které představují data data data nebo časového razítka, se považují za typ časového razítka.
  • Řetězcové sloupce, které představují číselná data, se považují za číselný typ.

S modulem Databricks Runtime 10.1 ML a novějším provádí AutoML také tyto úpravy:

  • Číselné sloupce, které obsahují kategorické ID, se považují za kategorickou funkci.
  • Řetězcové sloupce, které obsahují anglický text, se považují za textovou funkci.

Sémantické poznámky k typu

S modulem Databricks Runtime 10.1 ML a novějším můžete ručně řídit přiřazený sémantický typ umístěním sémantického typu do sloupce. Pokud chcete ručně anotovat sémantický typ sloupce <column-name> jako <semantic-type>, použijte následující syntaxi:

metadata_dict = df.schema["<column-name>"].metadata
metadata_dict["spark.contentAnnotation.semanticType"] = "<semantic-type>"
df = df.withMetadata("<column-name>", metadata_dict)

<semantic-type> může být jedna z následujících možností:

  • categorical: Sloupec obsahuje kategorické hodnoty (například číselné hodnoty, které by se měly považovat za ID).
  • numeric: Sloupec obsahuje číselné hodnoty (například řetězcové hodnoty, které je možné analyzovat na čísla).
  • datetime: Sloupec obsahuje hodnoty časového razítka (řetězcové, číselné nebo datové hodnoty, které lze převést na časové razítko).
  • text: Sloupec s řetězcem obsahuje anglický text.

Chcete-li zakázat detekci sémantických typů ve sloupci, použijte speciální poznámku nativeklíčového slova .

Hodnoty shapley (SHAP) pro vysvětlení modelu

Poznámka:

U MLR 11.1 a novějších se grafy SHAP negenerují, pokud datová sada obsahuje datetime sloupec.

Poznámkové bloky vytvořené regresí a klasifikací AutoML zahrnují kód pro výpočet hodnot Shapley. Hodnoty Shapley jsou založeny na teorii hry a odhadují důležitost každé funkce pro předpovědi modelu.

Poznámkové bloky AutoML používají balíček SHAP k výpočtu hodnot Shapley. Vzhledem k tomu, že tyto výpočty jsou velmi náročné na paměť, výpočty se ve výchozím nastavení neprovádí.

Výpočet a zobrazení hodnot Shapley:

  1. V poznámkovém bloku vygenerované službou AutoML přejděte do části Důležitost funkce.
  2. Nastavit shap_enabled = True.
  3. Znovu spusťte poznámkový blok.

Agregace časových řad

V případě problémů s prognózou používá AutoML průměr hodnot, pokud je v časové řadě více hodnot pro časové razítko.

Pokud chcete místo toho použít součet, upravte poznámkový blok zdrojového kódu. V buňce Agregovat data podle ... změňte .agg(y=(target_col, "avg")) na .agg(y=(target_col, "sum")), jak je znázorněno na obrázku:

group_cols = [time_col] + id_cols
df_aggregation = df_loaded \
  .groupby(group_cols) \
  .agg(y=(target_col, "sum")) \
  .reset_index() \
  .rename(columns={ time_col : "ds" })

Integrace úložiště funkcí

S modulem Databricks Runtime 11.3 LTS ML a novějším můžete pomocí existujících tabulek funkcí v Úložišti funkcí rozšířit původní vstupní datovou sadu pro vaše problémy s klasifikací a regresí.

S modulem Databricks Runtime 12.2 LTS ML a novějším můžete pomocí existujících tabulek funkcí v Úložišti funkcí rozšířit původní vstupní datovou sadu pro všechny problémy s AutoML: klasifikaci, regresi a prognózování.

Pokud chcete vytvořit tabulku funkcí, přečtěte si téma Co je úložiště funkcí?

Pokud chcete použít existující tabulky funkcí, můžete vybrat tabulky funkcí pomocí uživatelského rozhraní AutoML nebo nastavit feature_store_lookups parametr ve specifikaci spuštění AutoML.

feature_store_lookups = [
  {
     "table_name": "example.trip_pickup_features",
     "lookup_key": ["pickup_zip", "rounded_pickup_datetime"],
  },
  {
      "table_name": "example.trip_dropoff_features",
     "lookup_key": ["dropoff_zip", "rounded_dropoff_datetime"],
  }
]

Generování zkušebního poznámkového bloku

U předpovědí experimentů se automaticky naimportují poznámkové bloky vygenerované službou AutoML do vašeho pracovního prostoru pro všechny zkušební verze experimentu.

V případě klasifikačních a regresních experimentů se automaticky naimportují do vašeho pracovního prostoru poznámkové bloky vygenerované autoML pro zkoumání dat a nejlepší zkušební verzi experimentu. Vygenerované poznámkové bloky pro jiné zkušební verze experimentu se ukládají jako artefakty MLflow v DBFS místo automatického importu do vašeho pracovního prostoru. U všech zkušebních verzí kromě nejlepší zkušební verze notebook_path není nastavené rozhraní notebook_url API Pythonu TrialInfo . Pokud tyto poznámkové bloky potřebujete použít, můžete je ručně importovat do pracovního prostoru pomocí uživatelského rozhraní experimentu databricks.automl.import_notebookAutoML nebo rozhraní Python API.

Pokud používáte jenom poznámkový blok pro zkoumání dat nebo nejlepší zkušební poznámkový blok vygenerovaný autoML, sloupec Zdroj v uživatelském rozhraní experimentu AutoML obsahuje odkaz na vygenerovaný poznámkový blok pro nejlepší zkušební verzi.

Pokud používáte jiné vygenerované poznámkové bloky v uživatelském rozhraní experimentu AutoML, tyto poznámkové bloky se do pracovního prostoru automaticky neimportují. Poznámkové bloky najdete kliknutím na každé spuštění MLflow. Poznámkový blok IPython se uloží v části Artefakty na stránce spuštění. Tento poznámkový blok si můžete stáhnout a importovat do pracovního prostoru, pokud správce pracovního prostoru povolí stahování artefaktů.

Příklad poznámkového bloku: Experiment AutoML s úložištěm funkcí

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