Hoe Azure Databricks AutoML werkt

In dit artikel wordt beschreven hoe Azure Databricks AutoML werkt en de implementatie van concepten zoals ontbrekende waarde-imputatie en grote gegevenssampling.

Databricks AutoML voert het volgende uit:

  1. Bereidt de gegevensset voor op modeltraining. AutoML voert bijvoorbeeld onevenwichtige gegevensdetectie uit voor classificatieproblemen voorafgaand aan modeltraining.
  2. Itereert om meerdere modellen te trainen en af te stemmen , waarbij elk model wordt samengesteld op basis van opensource-onderdelen en eenvoudig kan worden bewerkt en geïntegreerd in uw machine learning-pijplijnen.
    • AutoML distribueert automatisch proefversies van hyperparameters over de werkknooppunten van een cluster.
    • Met Databricks Runtime 9.1 LTS ML of hoger wordt in AutoML automatisch een voorbeeld van uw gegevensset weergegeven als deze te groot is om in het geheugen van één werkknooppunt te passen. Zie Voorbeelden van grote gegevenssets.
  3. Evalueert modellen op basis van algoritmen uit de scikit-learn-, xgboost-, LightGBM-, Prophet- en ARIMA-pakketten.
  4. Geeft de resultaten weer en biedt een Python-notebook met de broncode voor elke proefuitvoering, zodat u de code kunt bekijken, reproduceren en wijzigen. AutoML berekent ook samenvattingsstatistieken voor uw gegevensset en slaat deze informatie op in een notebook die u later kunt bekijken.

AutoML-algoritmen

Databricks AutoML traint en evalueert modellen op basis van de algoritmen in de volgende tabel.

Notitie

Voor classificatie- en regressiemodellen zijn de beslissingsstructuur, willekeurige forests, logistieke regressie en lineaire regressie met stochastische gradiëntafnamealgoritmen gebaseerd op scikit-learn.

Classificatiemodellen Regressiemodellen Prognosemodellen
Beslissingsstructuren Beslissingsstructuren Profeet
Willekeurige forests Willekeurige forests Auto-ARIMA (beschikbaar in Databricks Runtime 10.3 ML en hoger.)
Logistieke regressie Lineaire regressie met stochastische gradiëntafname
XGBoost XGBoost
LightGBM LightGBM

Ondersteunde gegevensfunctiestypen

Functietypen die hieronder niet worden vermeld, worden niet ondersteund. Afbeeldingen worden bijvoorbeeld niet ondersteund.

De volgende functietypen worden ondersteund:

  • Numeriek (, , , , , en FloatTypeDoubleType) LongTypeIntegerTypeShortTypeByteType
  • Booleaanse waarde
  • Tekenreeks (categorische of Engelse tekst)
  • Tijdstempels (TimestampType, DateType)
  • ArrayType[Numeriek] (Databricks Runtime 10.4 LTS ML en hoger)
  • DecimalType (Databricks Runtime 11.3 LTS ML en hoger)

Gegevens splitsen in trainings-/validatie-/testsets

Met Databricks Runtime 10.4 LTS ML en hoger kunt u een tijdkolom opgeven die moet worden gebruikt voor het splitsen van gegevens voor training/validatie/testen voor classificatie- en regressieproblemen. Als u deze kolom opgeeft, wordt de gegevensset opgesplitst in trainings-, validatie- en testsets op tijd. De vroegste punten worden gebruikt voor training, de volgende vroegste voor validatie en de meest recente punten worden gebruikt als een testset. De tijdkolom moet een tijdstempel, tekenreeks of geheel getalkolom zijn.

Steekproeven maken van grote gegevenssets

Notitie

Steekproeven worden niet toegepast op prognoseproblemen.

Hoewel AutoML hyperparameterafstemmingstests distribueert over de werkknooppunten van een cluster, wordt elk model getraind op één werkknooppunt.

AutoML maakt automatisch een schatting van het geheugen dat nodig is voor het laden en trainen van uw gegevensset en steekt de gegevensset indien nodig in.

In Databricks Runtime 9.1 LTS ML via Databricks Runtime 10.4 LTS ML is de steekproeffractie niet afhankelijk van het knooppunttype van het cluster of de hoeveelheid geheugen op elk knooppunt.

In Databricks Runtime 11.x ML:

  • De steekproeffractie neemt toe voor werkknooppunten met meer geheugen per kern. U kunt de steekproefgrootte vergroten door een exemplaartype te kiezen dat is geoptimaliseerd voor geheugen.
  • U kunt de voorbeeldgrootte verder vergroten door een grotere waarde te kiezen voor spark.task.cpus in de Spark-configuratie voor het cluster. De standaardinstelling is 1; de maximumwaarde is het aantal CPU's op het werkknooppunt. Wanneer u deze waarde verhoogt, is de steekproefgrootte groter, maar worden er minder proefversies parallel uitgevoerd. In een machine met 4 kernen en 64 GB totale RAM-geheugen worden spark.task.cpus=1 bijvoorbeeld 4 proefversies per werkrol uitgevoerd, waarbij elke proefversie is beperkt tot 16 GB RAM. Als u instelt spark.task.cpus=4, voert elke werkrol slechts één proefversie uit, maar kan die proefversie 64 GB RAM gebruiken.

In Databricks Runtime 12.2 LTS ML en hoger kan AutoML trainen op grotere gegevenssets door meer CPU-kernen per trainingstaak toe te wijzen. U kunt de steekproefgrootte vergroten door een instantiegrootte met een groter totaal geheugen te kiezen.

Als In Databricks Runtime 11.3 LTS ML en hoger, als AutoML de gegevensset heeft gesampling, wordt de steekproeffractie weergegeven op het tabblad Overzicht in de gebruikersinterface.

Voor classificatieproblemen gebruikt AutoML de PySpark-methode sampleBy voor gelaagde steekproeven om de distributie van het doellabel te behouden.

Voor regressieproblemen gebruikt AutoML de PySpark-methodesample.

Ondersteuning voor onevenwichtige gegevenssets voor classificatieproblemen

In Databricks Runtime 11.3 LTS ML en hoger, als AutoML detecteert dat een gegevensset onevenwichtig is, probeert deze de onevenwichtigheid van de trainingsgegevensset te verminderen door de primaire klasse(sen) te verlagen en klassegewichten toe te voegen. AutoML balancer alleen de trainingsgegevensset en brengt de test- en validatiegegevenssets niet in balans. Dit zorgt ervoor dat de modelprestaties altijd worden geëvalueerd op de niet-verrijkte gegevensset met de werkelijke distributie van invoerklassen.

Om een onevenwichtige trainingsgegevensset te verdelen, gebruikt AutoML klassegewichten die omgekeerd zijn gerelateerd aan de mate waarin een bepaalde klasse wordt downsampled. Als een trainingsgegevensset met 100 voorbeelden bijvoorbeeld 95 monsters bevat die behoren tot klasse A en 5 voorbeelden die behoren tot klasse B, vermindert AutoML deze onevenwichtigheid door downsampling klasse A tot 70 steekproeven, dat is downsampling klasse A met een verhouding van 70/95 of 0,736, terwijl het aantal steekproeven in klasse B bij 5 wordt behouden. Om ervoor te zorgen dat het uiteindelijke model correct is gekalibreerd en de waarschijnlijkheidsverdeling van de modeluitvoer gelijk is aan die van de invoer, schaalt AutoML het klassegewicht voor klasse A op met de verhouding 1/0,736 of 1,358, terwijl het gewicht van klasse B als 1 wordt behouden. AutoML gebruikt deze klassegewichten in modeltraining vervolgens als parameter om ervoor te zorgen dat de steekproeven van elke klasse op de juiste wijze worden gewogen bij het trainen van het model.

Detectie van semantische typen

Notitie

  • Semantische typedetectie wordt niet toegepast op prognoseproblemen.
  • AutoML voert geen semantische typedetectie uit voor kolommen waarvoor aangepaste imputatiemethoden zijn opgegeven.

Met Databricks Runtime 9.1 LTS ML en hoger probeert AutoML te detecteren of kolommen een semantisch type hebben dat verschilt van het gegevenstype Spark of pandas in het tabelschema. AutoML behandelt deze kolommen als het gedetecteerde semantische type. Deze detecties zijn best effort en kunnen in sommige gevallen het bestaan van semantische typen missen. U kunt ook handmatig het semantische type van een kolom instellen of AutoML laten weten dat de detectie van semantische typen niet moet worden toegepast op een kolom met behulp van aantekeningen.

AutoML past deze aanpassingen aan:

  • Tekenreeks- en gehele getallenkolommen die datum- of tijdstempelgegevens vertegenwoordigen, worden behandeld als een tijdstempeltype.
  • Tekenreekskolommen die numerieke gegevens vertegenwoordigen, worden behandeld als een numeriek type.

Met Databricks Runtime 10.1 ML en hoger voert AutoML ook de volgende aanpassingen aan:

  • Numerieke kolommen die categorische id's bevatten, worden behandeld als een categorische functie.
  • Tekenreekskolommen die Engelse tekst bevatten, worden behandeld als een tekstfunctie.

Semantische aantekeningen

Met Databricks Runtime 10.1 ML en hoger kunt u handmatig het toegewezen semantische type beheren door een semantische typeaantekening op een kolom te plaatsen. Als u handmatig aantekeningen wilt maken voor het semantische type kolom <column-name> , <semantic-type>gebruikt u de volgende syntaxis:

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

<semantic-type> kan een van de volgende zijn:

  • categorical: De kolom bevat categorische waarden (bijvoorbeeld numerieke waarden die als id's moeten worden behandeld).
  • numeric: De kolom bevat numerieke waarden (bijvoorbeeld tekenreekswaarden die in getallen kunnen worden geparseerd).
  • datetime: De kolom bevat tijdstempelwaarden (tekenreeks, numerieke of datumwaarden die kunnen worden geconverteerd naar tijdstempels).
  • text: De tekenreekskolom bevat Engelse tekst.

Als u semantische typedetectie voor een kolom wilt uitschakelen, gebruikt u de speciale aantekening nativevan trefwoorden.

Shapley-waarden (SHAP) voor modeltoelichtendheid

Notitie

Voor MLR 11.1 en lager worden SHAP-plots niet gegenereerd als de gegevensset een datetime kolom bevat.

De notebooks die door AutoML-regressie en classificatie worden geproduceerd, bevatten code voor het berekenen van Shapley-waarden. Shapley-waarden zijn gebaseerd op speltheorie en schatten het belang van elke functie in de voorspellingen van een model.

AutoML-notebooks gebruiken het SHAP-pakket om Shapley-waarden te berekenen. Omdat deze berekeningen zeer geheugenintensief zijn, worden de berekeningen niet standaard uitgevoerd.

Shapley-waarden berekenen en weergeven:

  1. Ga naar de sectie Functiebelang in een door AutoML gegenereerd proefnotitieblok.
  2. Instellen shap_enabled = True.
  3. Voer het notebook opnieuw uit.

Tijdreeksaggregatie

Voor het voorspellen van problemen, wanneer er meerdere waarden voor een tijdstempel in een tijdreeks zijn, gebruikt AutoML het gemiddelde van de waarden.

Als u de som wilt gebruiken, bewerkt u het broncodenotitieblok. Wijzig .agg(y=(target_col, "avg")).agg(y=(target_col, "sum"))in de cel Aggregeren op ... in , zoals wordt weergegeven:

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" })

Integratie van Feature Store

Met Databricks Runtime 11.3 LTS ML en hoger kunt u bestaande functietabellen in Feature Store gebruiken om de oorspronkelijke invoergegevensset voor uw classificatie- en regressieproblemen te verbeteren.

Met Databricks Runtime 12.2 LTS ML en hoger kunt u bestaande functietabellen in Feature Store gebruiken om de oorspronkelijke invoergegevensset voor al uw AutoML-problemen te verbeteren: classificatie, regressie en prognose.

Als u een functietabel wilt maken, raadpleegt u Wat is een functiearchief?

Als u bestaande functietabellen wilt gebruiken, kunt u functietabellen selecteren met de AutoML-gebruikersinterface of de feature_store_lookups parameter instellen in uw AutoML-uitvoeringsspecificatie.

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"],
  }
]

Generatie van proefnotitieblok

Voor prognoseexperimenten worden door AutoML gegenereerde notebooks automatisch geïmporteerd in uw werkruimte voor alle proefversies van uw experiment.

Voor classificatie- en regressieexperimenten worden door AutoML gegenereerde notebooks voor gegevensverkenning en de beste proefversie in uw experiment automatisch geïmporteerd in uw werkruimte. Gegenereerde notebooks voor andere experimenten worden opgeslagen als MLflow-artefacten in DBFS, in plaats van automatisch geïmporteerd in uw werkruimte. Voor alle proefversies naast de beste proefversie zijn de notebook_path en notebook_url in de TrialInfo Python-API niet ingesteld. Als u deze notebooks wilt gebruiken, kunt u deze handmatig importeren in uw werkruimte met de gebruikersinterface van het AutoML-experiment of de databricks.automl.import_notebookPython-API.

Als u alleen het notebook voor gegevensverkenning of het beste proefnotitieblok gebruikt dat is gegenereerd door AutoML, bevat de kolom Bron in de gebruikersinterface van het AutoML-experiment de koppeling naar het gegenereerde notebook voor de beste proefversie.

Als u andere gegenereerde notebooks gebruikt in de gebruikersinterface van het AutoML-experiment, worden deze niet automatisch geïmporteerd in de werkruimte. U vindt de notebooks door te klikken op elke MLflow-uitvoering. Het IPython-notebook wordt opgeslagen in de sectie Artefacten van de uitvoeringspagina. U kunt dit notitieblok downloaden en importeren in de werkruimte als het downloaden van artefacten is ingeschakeld door uw werkruimtebeheerders.

Notebook-voorbeeld: AutoML-experiment met Feature Store

In het volgende notebook ziet u hoe u een ML-model traint met functietabellen AutoML en Feature Store.

AutoML-experiment met voorbeeldnotitieblok van Feature Store

Notebook downloaden