Jak działa rozwiązanie AutoML usługi Azure Databricks

W tym artykule opisano sposób działania rozwiązania AutoML w usłudze Azure Databricks oraz implementację pojęć, takich jak imputacja brakującej wartości i próbkowanie dużych danych.

Rozwiązanie AutoML usługi Databricks wykonuje następujące czynności:

  1. Przygotowuje zestaw danych do trenowania modelu. Na przykład rozwiązanie AutoML przeprowadza niezrównoważony wykrywanie danych pod kątem problemów klasyfikacji przed trenowaniem modelu.
  2. Iteruje trenowanie i dostrajanie wielu modeli, w których każdy model jest tworzony na podstawie składników typu open source i można go łatwo edytować i zintegrować z potokami uczenia maszynowego.
    • Rozwiązanie AutoML automatycznie dystrybuuje wersje próbne dostrajania hiperparametrów w węzłach roboczych klastra.
    • W przypadku środowiska Databricks Runtime 9.1 LTS ML lub nowszego rozwiązanie AutoML automatycznie próbkuje zestaw danych, jeśli jest zbyt duży, aby zmieścić się w pamięci pojedynczego węzła roboczego. Zobacz Próbkowanie dużych zestawów danych.
  3. Ocenia modele na podstawie algorytmów z pakietów scikit-learn, xgboost, LightGBM, Prophet i ARIMA .
  4. Wyświetla wyniki i udostępnia notes języka Python z kodem źródłowym dla każdego przebiegu wersji próbnej, aby można było przejrzeć, odtworzyć i zmodyfikować kod. Rozwiązanie AutoML oblicza również statystyki podsumowania zestawu danych i zapisuje te informacje w notesie, który można przejrzeć później.

Algorytmy automatycznego uczenia maszynowego

Rozwiązanie Databricks AutoML trenuje i ocenia modele na podstawie algorytmów w poniższej tabeli.

Uwaga

W przypadku modeli klasyfikacji i regresji drzewo decyzyjne, lasy losowe, regresja logistyczna i regresja liniowa z algorytmami spadku gradientu stochastycznego są oparte na technologii scikit-learn.

Modele klasyfikacji Modele regresji Modele prognozowania
Drzewa decyzyjne Drzewa decyzyjne Proroka
Lasy losowe Lasy losowe Auto-ARIMA (dostępne w środowisku Databricks Runtime 10.3 ML i nowszym).
Regresja logistyczna Regresja liniowa ze spadkiem gradientu stochastycznego
XGBoost XGBoost
LightGBM LightGBM

Obsługiwane typy funkcji danych

Typy funkcji, których nie wymieniono poniżej, nie są obsługiwane. Na przykład obrazy nie są obsługiwane.

Obsługiwane są następujące typy funkcji:

  • Numeryczne (ByteType, , IntegerTypeShortType, LongType, FloatTypei DoubleType)
  • Wartość logiczna
  • Ciąg (tekst kategorii lub angielski)
  • Znaczniki czasu (TimestampType, DateType)
  • ArrayType[Numeric] (Databricks Runtime 10.4 LTS ML i nowsze)
  • DecimalType (Databricks Runtime 11.3 LTS ML i nowsze)

Dzielenie danych na zestawy train/validation/test

W środowisku Databricks Runtime 10.4 LTS ML i nowszym można określić kolumnę czasu, która ma być używana na potrzeby podziału danych trenowania/walidacji/testowania na potrzeby problemów klasyfikacji i regresji. Jeśli określisz tę kolumnę, zestaw danych zostanie podzielony na zestawy trenowania, walidacji i testów według czasu. Najwcześniejsze punkty są używane do trenowania, następnego najwcześniejszego sprawdzania poprawności, a najnowsze punkty są używane jako zestaw testów. Kolumna czasu musi być sygnaturą czasową, ciągiem lub liczbą całkowitą.

Próbkowanie dużych zestawów danych

Uwaga

Próbkowanie nie jest stosowane do problemów z prognozowaniem.

Mimo że rozwiązanie AutoML dystrybuuje próby dostrajania hiperparametrów w węzłach roboczych klastra, każdy model jest trenowany w jednym węźle roboczym.

Rozwiązanie AutoML automatycznie szacuje pamięć wymaganą do załadowania i wytrenowania zestawu danych oraz przykładów zestawu danych w razie potrzeby.

W środowisku Databricks Runtime 9.1 LTS ML za pośrednictwem środowiska Databricks Runtime 10.4 LTS ML ułamek próbkowania nie zależy od typu węzła klastra ani ilości pamięci w każdym węźle.

W środowisku Databricks Runtime 11.x ML:

  • Ułamek próbkowania zwiększa się dla węzłów roboczych, które mają więcej pamięci na rdzeń. Rozmiar próbki można zwiększyć, wybierając typ wystąpienia zoptymalizowanego pod kątem pamięci.
  • Możesz jeszcze bardziej zwiększyć rozmiar próbki, wybierając większą wartość w spark.task.cpus konfiguracji platformy Spark dla klastra. Ustawieniem domyślnym jest 1; maksymalna wartość to liczba procesorów CPU w węźle procesu roboczego. Po zwiększeniu tej wartości rozmiar próbki jest większy, ale mniej prób jest uruchamianych równolegle. Na przykład na maszynie z 4 rdzeniami i 64 GB całkowitej pamięci RAM domyślnie spark.task.cpus=1 działa 4 wersje próbne na proces roboczy z każdą wersją próbną ograniczoną do 16 GB pamięci RAM. W przypadku ustawienia spark.task.cpus=4każdy proces roboczy uruchamia tylko jedną wersję próbną, ale ta wersja próbna może używać 64 GB pamięci RAM.

W środowisku Databricks Runtime 12.2 LTS ML lub nowszym rozwiązanie AutoML może trenować na większych zestawach danych, przydzielając więcej rdzeni procesora CPU na zadanie trenowania. Rozmiar próbki można zwiększyć, wybierając rozmiar wystąpienia o większej całkowitej ilości pamięci.

W środowisku Databricks Runtime 11.3 LTS ML i nowszym, jeśli zestaw danych został próbkowany przez rozwiązanie AutoML, ułamek próbkowania jest wyświetlany na karcie Przegląd w interfejsie użytkownika.

W przypadku problemów klasyfikacji rozwiązanie AutoML używa metody PySpark sampleBydo próbkowania warstwowego w celu zachowania rozkładu etykiet docelowych.

W przypadku problemów z regresją rozwiązanie AutoML używa metody PySpark.sample

Obsługa niezrównoważonych zestawów danych w przypadku problemów z klasyfikacją

W środowisku Databricks Runtime 11.3 LTS ML i nowszym, jeśli rozwiązanie AutoML wykryje, że zestaw danych jest niezrównoważony, próbuje zmniejszyć dysproporcję zestawu danych trenowania przez zmniejszenie liczby głównych klas i dodanie wag klas. Rozwiązanie AutoML równoważy tylko zestaw danych trenowania i nie równoważy zestawów danych testów i walidacji. Dzięki temu wydajność modelu jest zawsze oceniana na niezbogaconym zestawie danych z rzeczywistym rozkładem klas wejściowych.

Aby zrównoważyć niezrównoważony zestaw danych trenowania, rozwiązanie AutoML używa wag klas, które są odwrotnie powiązane z stopniem, w którym dana klasa jest w dół. Jeśli na przykład zestaw danych treningowych z 100 próbkami ma 95 próbek należących do klasy A i 5 próbek należących do klasy B, AutoML zmniejsza tę nierównowagę przez downsampling klasy A do 70 próbek, czyli downsampling klasy A o stosunek 70/95 lub 0,736, przy zachowaniu liczby próbek w klasie B na 5. Aby upewnić się, że ostateczny model jest poprawnie skalibrowany, a rozkład prawdopodobieństwa danych wyjściowych modelu jest taki sam jak w przypadku danych wejściowych, automl skaluje w górę wagę klasy A o współczynnik 1/0,736 lub 1,358, przy zachowaniu wagi klasy B jako 1. Następnie rozwiązanie AutoML używa tych wag klas w trenowaniu modelu jako parametru, aby upewnić się, że próbki z każdej klasy są odpowiednio ważone podczas trenowania modelu.

Wykrywanie typów semantycznych

Uwaga

  • Wykrywanie typów semantycznych nie jest stosowane do prognozowania problemów.
  • AutoML nie wykonuje wykrywania typów semantycznych dla kolumn, które mają określone niestandardowe metody imputacji.

W przypadku środowiska Databricks Runtime 9.1 LTS ML lub nowszego rozwiązanie AutoML próbuje wykryć, czy kolumny mają typ semantyczny inny niż typ danych platformy Spark lub biblioteki pandas w schemacie tabeli. Rozwiązanie AutoML traktuje te kolumny jako wykryty typ semantyczny. Te wykrycia są najlepszym rozwiązaniem i mogą przegapić istnienie typów semantycznych w niektórych przypadkach. Można również ręcznie ustawić semantyczny typ kolumny lub poinformować automl, aby nie stosować wykrywania typów semantycznych do kolumny przy użyciu adnotacji.

W szczególności rozwiązanie AutoML wprowadza następujące korekty:

  • Kolumny ciągów i liczb całkowitych reprezentujące dane daty lub znacznika czasu są traktowane jako typ znacznika czasu.
  • Kolumny ciągów reprezentujące dane liczbowe są traktowane jako typ liczbowy.

W przypadku środowiska Databricks Runtime 10.1 ML i nowszego rozwiązanie AutoML wprowadza również następujące korekty:

  • Kolumny liczbowe zawierające identyfikatory kategorii są traktowane jako cecha kategorii.
  • Kolumny ciągów zawierające tekst w języku angielskim są traktowane jako funkcja tekstowa.

Adnotacje typu semantycznego

W środowisku Databricks Runtime 10.1 ML i nowszym można ręcznie kontrolować przypisany typ semantyczny, umieszczając adnotację typu semantycznego w kolumnie. Aby ręcznie dodać adnotację do semantycznego typu kolumny <column-name> jako <semantic-type>, użyj następującej składni:

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

<semantic-type> może być jednym z następujących elementów:

  • categorical: Kolumna zawiera wartości kategorii (na przykład wartości liczbowe, które powinny być traktowane jako identyfikatory).
  • numeric: Kolumna zawiera wartości liczbowe (na przykład wartości ciągów, które mogą być analizowane w liczbach).
  • datetime: Kolumna zawiera wartości znacznika czasu (ciąg, wartość liczbowa lub data, które można przekonwertować na znaczniki czasu).
  • text: Kolumna ciągu zawiera tekst w języku angielskim.

Aby wyłączyć wykrywanie typów semantycznych w kolumnie, użyj specjalnej adnotacji nativesłowa kluczowego .

Shapley values (SHAP) for model explainability (Shapley values) for model explainability (Shapley values( SHAP) for model explainability (Shaple

Uwaga

W przypadku usługi MLR 11.1 i nowszych wykresy SHAP nie są generowane, jeśli zestaw danych zawiera kolumnę datetime .

Notesy utworzone przez przebiegi regresji i klasyfikacji automatycznego uczenia maszynowego zawierają kod umożliwiający obliczenie wartości Shapley. Wartości shapley opierają się na teorii gier i szacują znaczenie każdej funkcji przewidywania modelu.

Notesy rozwiązania AutoML używają pakietu SHAP do obliczania wartości Shapley. Ponieważ te obliczenia są bardzo intensywnie obciążane pamięcią, obliczenia nie są domyślnie wykonywane.

Aby obliczyć i wyświetlić wartości Shapley:

  1. Przejdź do sekcji Ważność funkcji w notesie wersji próbnej wygenerowanej przez rozwiązanie AutoML.
  2. Ustaw wartość shap_enabled = True.
  3. Uruchom ponownie notes.

Agregacja szeregów czasowych

W przypadku problemów z prognozowaniem, gdy w szeregach czasowych istnieje wiele wartości, automl używa średniej wartości.

Aby zamiast tego użyć sumy, edytuj notes kodu źródłowego. W komórce Agregowanie danych według ... zmień wartość .agg(y=(target_col, "avg")) na .agg(y=(target_col, "sum")), jak pokazano:

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

Integracja z magazynem funkcji

W środowisku Databricks Runtime 11.3 LTS ML i nowszym można użyć istniejących tabel funkcji w magazynie funkcji, aby rozszerzyć oryginalny zestaw danych wejściowych na potrzeby problemów z klasyfikacją i regresją.

W środowisku Databricks Runtime 12.2 LTS ML i nowszym można użyć istniejących tabel funkcji w magazynie funkcji, aby rozszerzyć oryginalny zestaw danych wejściowych dla wszystkich problemów z rozwiązaniem AutoML: klasyfikacja, regresja i prognozowanie.

Aby utworzyć tabelę funkcji, zobacz Co to jest magazyn funkcji?.

Aby użyć istniejących tabel funkcji, możesz wybrać tabele funkcji za pomocą interfejsu użytkownika rozwiązania AutoML lub ustawić feature_store_lookupsparametr w specyfikacji uruchamiania rozwiązania 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"],
  }
]

Generowanie notesu w wersji próbnej

W przypadku eksperymentów prognozowania notesy wygenerowane przez rozwiązanie AutoML są automatycznie importowane do obszaru roboczego dla wszystkich prób eksperymentu.

W przypadku eksperymentów klasyfikacji i regresji notesy wygenerowane przez rozwiązanie AutoML na potrzeby eksploracji danych i najlepszej wersji próbnej w eksperymencie są automatycznie importowane do obszaru roboczego. Wygenerowane notesy dla innych prób eksperymentów są zapisywane jako artefakty MLflow w systemie plików DBFS, a nie automatycznie importowane do obszaru roboczego. W przypadku wszystkich wersji próbnych oprócz najlepszej wersji próbnej notebook_path zestaw i notebook_url w interfejsie TrialInfo API języka Python nie jest ustawiony. Jeśli chcesz użyć tych notesów, możesz ręcznie zaimportować je do obszaru roboczego przy użyciu interfejsu użytkownika eksperymentu rozwiązania AutoML lub interfejsu databricks.automl.import_notebookAPI języka Python.

Jeśli używasz tylko notesu eksploracji danych lub notesu najlepszej wersji próbnej wygenerowanego przez rozwiązanie AutoML, kolumna Źródło w interfejsie użytkownika eksperymentu rozwiązania AutoML zawiera link do wygenerowanego notesu w celu uzyskania najlepszej wersji próbnej.

Jeśli używasz innych wygenerowanych notesów w interfejsie użytkownika eksperymentu rozwiązania AutoML, nie są one automatycznie importowane do obszaru roboczego. Notesy można znaleźć, klikając poszczególne przebiegi platformy MLflow. Notes IPython jest zapisywany w sekcji Artifacts (Artefakty ) na stronie uruchamiania. Możesz pobrać ten notes i zaimportować go do obszaru roboczego, jeśli pobieranie artefaktów jest włączone przez administratorów obszaru roboczego.

Przykład notesu: Eksperyment automatycznego uczenia maszynowego z magazynem funkcji

W poniższym notesie pokazano, jak wytrenować model uczenia maszynowego przy użyciu tabel funkcji AutoML i Feature Store.

Przykładowy notes dotyczący eksperymentu automatycznego uczenia maszynowego z magazynem funkcji

Pobierz notes