Så här fungerar Azure Databricks AutoML

Den här artikeln beskriver hur Azure Databricks AutoML fungerar och dess implementering av begrepp som imputation av saknade värden och stor datasampling.

Databricks AutoML utför följande:

  1. Förbereder datauppsättningen för modellträning. AutoML utför till exempel obalanserad dataidentifiering för klassificeringsproblem före modellträning.
  2. Itererar för att träna och finjustera flera modeller, där varje modell är konstruerad av öppen källkod komponenter och enkelt kan redigeras och integreras i dina maskininlärningspipelines.
    • AutoML distribuerar automatiskt hyperparameterjusteringsförsök över arbetsnoderna i ett kluster.
    • Med Databricks Runtime 9.1 LTS ML eller senare tar AutoML automatiskt exempel på din datauppsättning om den är för stor för att få plats i minnet på en enda arbetsnod. Se Sampling av stora datamängder.
  3. Utvärderar modeller baserat på algoritmer från paketen scikit-learn, xgboost, LightGBM, Prophet och ARIMA .
  4. Visar resultatet och tillhandahåller en Python-notebook-fil med källkoden för varje utvärderingskörning så att du kan granska, återskapa och ändra koden. AutoML beräknar även sammanfattningsstatistik för din datamängd och sparar den här informationen i en notebook-fil som du kan granska senare.

AutoML-algoritmer

Databricks AutoML tränar och utvärderar modeller baserat på algoritmerna i följande tabell.

Kommentar

För klassificerings- och regressionsmodeller baseras beslutsträdet, slumpmässiga skogar, logistisk regression och linjär regression med stochastic gradient descent-algoritmer på scikit-learn.

Klassificeringsmodeller Regressionsmodeller Prognosmodeller
Beslutsträd Beslutsträd Profeten
Slumpmässiga skogar Slumpmässiga skogar Auto-ARIMA (finns i Databricks Runtime 10.3 ML och senare.)
Logistisk regression Linjär regression med stokastisk gradient nedstigning
XGBoost XGBoost
LightGBM LightGBM

Datafunktionstyper som stöds

Funktionstyper som inte visas nedan stöds inte. Bilder stöds till exempel inte.

Följande funktionstyper stöds:

  • Numeriska (ByteType, ShortType, IntegerType, LongType, FloatTypeoch DoubleType)
  • Booleskt
  • Sträng (kategorisk eller engelsk text)
  • Tidsstämplar (TimestampType, DateType)
  • ArrayType[Numerisk] (Databricks Runtime 10.4 LTS ML och senare)
  • DecimalType (Databricks Runtime 11.3 LTS ML och senare)

Dela upp data i tränings-/validerings-/testuppsättningar

Det finns två tillgängliga metoder för att dela upp data i tränings-, validerings- och testuppsättningar:

(Standard) Slumpmässig delning: Om datadelningsstrategin inte har angetts delas datamängden upp i tränings-, verifierings- och testuppsättningar. Förhållandet är 60 % träningsdelning, 20 % validera delning, 20 % testdelning. Den här divisionen utförs slumpmässigt i bakgrunden. När det gäller klassificeringsuppgifter används en stratifierad slumpmässig uppdelning för att säkerställa att varje klass är tillräckligt representerad i tränings-, validerings- och testuppsättningarna.

Kronologisk delning: I Databricks Runtime 10.4 LTS ML och senare kan du ange en tidskolumn som ska användas för att träna, validera och testa datadelning för klassificerings- och regressionsproblem. Om du anger den här kolumnen delas datauppsättningen upp i tränings-, validerings- och testuppsättningar efter tid. De tidigaste punkterna används för träning, den näst tidigaste för validering och de senaste punkterna används som en testuppsättning. Tidskolumnen kan vara en tidsstämpel, heltal eller strängkolumn.

Sampling av stora datamängder

Kommentar

Sampling tillämpas inte på prognosproblem.

Även om AutoML distribuerar hyperparameterjusteringsförsök över arbetsnoderna i ett kluster tränas varje modell på en enda arbetsnod.

AutoML uppskattar automatiskt det minne som krävs för att läsa in och träna datauppsättningen och tar datamängden exempel vid behov.

I Databricks Runtime 9.1 LTS ML via Databricks Runtime 10.4 LTS ML beror samplingsfraktionen inte på klustrets nodtyp eller mängden minne på varje nod.

I Databricks Runtime 11.x ML:

  • Samplingsfraktionen ökar för arbetsnoder som har mer minne per kärna. Du kan öka exempelstorleken genom att välja en minnesoptimerad instanstyp.
  • Du kan öka exempelstorleken ytterligare genom att välja ett större värde för spark.task.cpus i Spark-konfigurationen för klustret. Standardinställningen är 1. det maximala värdet är antalet processorer på arbetsnoden. När du ökar det här värdet är exempelstorleken större, men färre utvärderingsversioner körs parallellt. På en dator med 4 kärnor och totalt 64 GB RAM-minne körs standardvärdet spark.task.cpus=1 4 utvärderingsversioner per arbetare med varje utvärderingsversion begränsad till 16 GB RAM-minne. Om du anger spark.task.cpus=4kör varje arbetare bara en utvärderingsversion men den utvärderingsversionen kan använda 64 GB RAM-minne.

I Databricks Runtime 12.2 LTS ML och senare kan AutoML träna på större datamängder genom att allokera fler CPU-kärnor per träningsuppgift. Du kan öka exempelstorleken genom att välja en instansstorlek med större totalt minne.

I Databricks Runtime 11.3 LTS ML och senare visas samplingsfraktionen på fliken Översikt i användargränssnittet om AutoML samplade datamängden.

För klassificeringsproblem använder AutoML PySpark-metoden sampleBy för stratifierad sampling för att bevara måletikettfördelningen.

För regressionsproblem använder AutoML PySpark-metodensample.

Stöd för obalanserad datamängd för klassificeringsproblem

I Databricks Runtime 11.3 LTS ML och senare, om AutoML upptäcker att en datauppsättning är obalanserad, försöker den minska obalansen i träningsdatauppsättningen genom att fördela de större klasserna och lägga till klassvikter. AutoML balanserar endast träningsdatauppsättningen och balanserar inte test- och valideringsdatauppsättningarna. Detta säkerställer att modellprestanda alltid utvärderas på den icke-berikade datamängden med den sanna indataklassfördelningen.

För att balansera en obalanserad träningsdatauppsättning använder AutoML klassvikter som är omvänt relaterade till i vilken grad en viss klass är nedsamplad. Om en träningsdatauppsättning med 100 exempel till exempel har 95 prover som hör till klass A och 5 exempel som hör till klass B, minskar AutoML denna obalans genom att fördela klass A till 70 prover, som är nedsampling av klass A med förhållandet 70/95 eller 0,736, samtidigt som antalet prover i klass B hålls på 5. För att säkerställa att den slutliga modellen är korrekt kalibrerad och sannolikhetsfördelningen för modellutdata är densamma som för indata skalar AutoML upp klassvikten för klass A med förhållandet 1/0,736 eller 1,358, samtidigt som vikten för klass B hålls som 1. AutoML använder sedan dessa klassvikter i modellträning som en parameter för att säkerställa att exemplen från varje klass viktas korrekt när modellen tränas.

Identifiering av semantisk typ

Kommentar

  • Identifiering av semantisk typ tillämpas inte på prognosproblem.
  • AutoML utför inte semantisk typidentifiering för kolumner som har anpassade imputationsmetoder angivna.

Med Databricks Runtime 9.1 LTS ML och senare försöker AutoML identifiera om kolumner har en semantisk typ som skiljer sig från Spark- eller Pandas-datatypen i tabellschemat. AutoML behandlar dessa kolumner som den identifierade semantiska typen. Dessa identifieringar är bäst och kan i vissa fall missa förekomsten av semantiska typer. Du kan också ange semantisk typ av en kolumn manuellt eller be AutoML att inte tillämpa semantisk typidentifiering på en kolumn med hjälp av anteckningar.

Mer specifikt gör AutoML dessa justeringar:

  • Sträng- och heltalskolumner som representerar datum- eller tidsstämpeldata behandlas som en tidsstämpeltyp.
  • Strängkolumner som representerar numeriska data behandlas som en numerisk typ.

Med Databricks Runtime 10.1 ML och senare gör AutoML även dessa justeringar:

  • Numeriska kolumner som innehåller kategoriska ID:n behandlas som en kategorisk funktion.
  • Strängkolumner som innehåller engelsk text behandlas som en textfunktion.

Anteckningar av semantisk typ

Med Databricks Runtime 10.1 ML och senare kan du manuellt styra den tilldelade semantiska typen genom att placera en semantisk typanteckning i en kolumn. Om du vill kommentera den semantiska typen av kolumn <column-name> manuellt som <semantic-type>använder du följande syntax:

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

<semantic-type> kan vara något av följande:

  • categorical: Kolumnen innehåller kategoriska värden (till exempel numeriska värden som ska behandlas som ID:n).
  • numeric: Kolumnen innehåller numeriska värden (till exempel strängvärden som kan parsas till tal).
  • datetime: Kolumnen innehåller tidsstämpelvärden (sträng-, numeriska eller datumvärden som kan konverteras till tidsstämplar).
  • text: Strängkolumnen innehåller engelsk text.

Om du vill inaktivera identifiering av semantisk typ i en kolumn använder du den särskilda nyckelordsanteckningen native.

Shapley-värden (SHAP) för modellförklarbarhet

Kommentar

För MLR 11.1 och lägre genereras inte SHAP-diagram, om datauppsättningen innehåller en datetime kolumn.

Notebook-filerna som skapas av AutoML-regression och klassificeringskörningar innehåller kod för att beräkna Shapley-värden. Shapley-värden baseras på spelteori och beräknar vikten av varje funktion för en modells förutsägelser.

AutoML-notebook-filer använder SHAP-paketet för att beräkna Shapley-värden. Eftersom dessa beräkningar är mycket minnesintensiva utförs inte beräkningarna som standard.

Så här beräknar och visar du Shapley-värden:

  1. Gå till avsnittet Funktionsprimitet i en AutoML-genererad utvärderingsanteckningsbok.
  2. Ange shap_enabled = True.
  3. Kör notebook-filen igen.

Aggregering av tidsserier

För prognostiseringsproblem använder AutoML medelvärdet av värdena när det finns flera värden för en tidsstämpel i en tidsserie.

Om du vill använda summan i stället redigerar du anteckningsboken för källkoden. I cellen Aggregera data efter ... ändrar du .agg(y=(target_col, "avg")) till .agg(y=(target_col, "sum")), enligt följande:

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

Integrering av funktionslager

Med Databricks Runtime 11.3 LTS ML och senare kan du använda befintliga funktionstabeller i Funktionsarkiv för att utöka den ursprungliga indatauppsättningen för dina klassificerings- och regressionsproblem.

Med Databricks Runtime 12.2 LTS ML och senare kan du använda befintliga funktionstabeller i Funktionsarkiv för att utöka den ursprungliga indatauppsättningen för alla dina AutoML-problem: klassificering, regression och prognostisering.

Information om hur du skapar en funktionstabell finns i Vad är ett funktionsarkiv?.

Om du vill använda befintliga funktionstabeller kan du välja funktionstabeller med AutoML-användargränssnittet eller ange parametern feature_store_lookups i autoML-körningsspecifikationen.

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

Generering av utvärderingsanteckningsbok

För prognostiseringsexperiment importeras automatiskt AutoML-genererade notebook-filer till din arbetsyta för alla utvärderingsversioner av experimentet.

För klassificerings- och regressionsexperiment importeras automatiskt AutoML-genererade notebook-filer för datautforskning och den bästa utvärderingsversionen i experimentet till din arbetsyta. Genererade notebook-filer för andra experimentförsök sparas som MLflow-artefakter på DBFS i stället för automatiskt importerade till din arbetsyta. För alla utvärderingsversioner förutom den bästa utvärderingsversionen notebook_path anges inte och notebook_url i Python-API:et TrialInfo . Om du behöver använda dessa notebook-filer kan du importera dem manuellt till din arbetsyta med AutoML-experimentgränssnittet eller Python-API:et.databricks.automl.import_notebook

Om du bara använder notebook-filen för datautforskning eller den bästa utvärderingsanteckningsboken som genereras av AutoML innehåller kolumnen Källa i AutoML-experimentgränssnittet länken till den genererade notebook-filen för den bästa utvärderingsversionen.

Om du använder andra genererade notebook-filer i AutoML-experimentgränssnittet importeras de inte automatiskt till arbetsytan. Du hittar anteckningsböckerna genom att klicka på varje MLflow-körning. IPython-anteckningsboken sparas i avsnittet Artefakter på körningssidan. Du kan ladda ned den här notebook-filen och importera den till arbetsytan om du har aktiverat nedladdning av artefakter av arbetsyteadministratörerna.

Notebook-exempel: AutoML-experiment med Funktionsarkiv

Följande notebook-fil visar hur du tränar en ML-modell med funktionstabeller för AutoML och Funktionsarkiv.

AutoML-experiment med Exempelanteckningsbok för Funktionsarkiv

Hämta notebook-fil