Udostępnij za pośrednictwem


Trenowanie wyjaśnialnych maszyn wzmacniających - regresja (wersja wstępna)

W tym artykule dowiesz się, jak trenować modele regresji przy użyciu wyjaśnialnych maszyn zwiększających (EBM) w usłudze Microsoft Fabric. EBM to technika uczenia maszynowego, która łączy możliwości zwiększania gradientu z naciskiem na możliwość interpretacji modelu. Tworzy zespół drzew decyzyjnych, podobnie jak wzmacnianie gradientowe, ale z unikalnym naciskiem na generowanie modeli zrozumiałych dla człowieka. EbMs zapewniają nie tylko dokładne przewidywania, ale także oferują jasne i intuicyjne wyjaśnienia dla tych przewidywań. Są one odpowiednie dla aplikacji, w których zrozumienie podstawowych czynników wpływających na decyzje dotyczące modelu jest niezbędne, takie jak opieka zdrowotna, finanse i zgodność z przepisami.

W SynapseML można użyć skalowalnej implementacji wyjaśnialnych maszyn boostingowych, obsługiwanych przez Apache Spark, do trenowania nowych modeli. Ten samouczek przeprowadzi Cię przez proces stosowania skalowalności i interpretowalności wyjaśnialnych maszyn wzmacniających w Microsoft Fabric z wykorzystaniem platformy Apache Spark. Korzystanie z możliwych do wyjaśnienia zwiększania wydajności maszyn z usługą Microsoft Fabric jest obecnie dostępne w wersji zapoznawczej.

Ważny

Ta funkcja jest dostępna w wersji zapoznawczej .

Zalety wyjaśnialnych algorytmów boostingowych

EbMs oferują unikalną mieszankę możliwości interpretacji i mocy predykcyjnej, dzięki czemu są idealnym wyborem, gdy przejrzystość i zrozumienie modeli uczenia maszynowego mają kluczowe znaczenie. Dzięki ebMs użytkownicy mogą uzyskać cenny wgląd w podstawowe czynniki napędzające przewidywania, umożliwiając im zrozumienie, dlaczego model podejmuje konkretne decyzje lub przewidywania, co jest niezbędne do budowania zaufania do systemów sztucznej inteligencji.

Ich zdolność do odkrywania złożonych relacji w danych przy jednoczesnym zapewnieniu przejrzystych i możliwych do interpretacji wyników sprawia, że są one bezcenne w takich dziedzinach, jak finanse, opieka zdrowotna i wykrywanie oszustw. W tych dziedzinach objaśnienie modelu jest nie tylko pożądane, ale często wymaganie prawne. Ostatecznie wybór EBM-ów może zapewniać równowagę między wydajnością a przejrzystością modelu, zapewniając, że rozwiązania sztucznej inteligencji są dokładne, łatwo zrozumiałe oraz odpowiedzialne.

Warunki wstępne

  • Pobierz subskrypcję usługi Microsoft Fabric . Możesz też utworzyć bezpłatne konto wersji próbnej usługi Microsoft Fabric.

  • Zaloguj się do usługi Microsoft Fabric.

  • Użyj przełącznika doświadczeń w lewej dolnej części strony głównej, aby przełączyć się na Fabric.

    Zrzut ekranu przedstawiający menu przełącznika doświadczeń, pokazujące, gdzie wybrać pozycję Nauka o danych.

  • Utwórz nowy notes w obszarze roboczym, wybierając pozycję +, a następnie Notes.

Importowanie biblioteki MLflow

Rozwiązanie MLflow umożliwia śledzenie parametrów i wyników modelu. Poniższy fragment kodu pokazuje, jak używać biblioteki MLflow do celów eksperymentowania i śledzenia. Wartość ebm-wine-quality to nazwa eksperymentu, w którym są rejestrowane informacje.

# Import MLflow
import mlflow

# Create a new experiment for EBM Wine Quality
mlflow.set_experiment("ebm-wine-quality")

Ładowanie danych

Poniższy fragment kodu ładuje i przygotowuje standardowy zestaw danych jakości wina, który służy jako kompaktowy, ale cenny zestaw danych na potrzeby zadań regresji. Ważne jest, aby podkreślić, że proces konwersji obejmuje konwertowanie ramki danych Pandas (zwracanej przez bibliotekę Sklearn w przypadku używania argumentu as_frame) do ramki danych Spark, zgodnie z wymaganiami trenerów w stylu Spark ML.

import sklearn

# Load the Wine Quality Data Set using the as_frame argument for Pandas compatibility.
bunch = sklearn.datasets.load_wine(as_frame=True)

# Extract the data into a Pandas dataframe.
pandas_df = bunch['data']

# Add the target variable to the Pandas dataframe.
pandas_df['target'] = bunch['target']

# Convert the Pandas dataframe to a Spark dataframe.
df = spark.createDataFrame(pandas_df)

# Display the resulting Spark dataframe.
display(df)

Ten fragment kodu przedstawia sposób ładowania, manipulowania i konwertowania zestawu danych do użycia z zadaniami uczenia maszynowego opartymi na platformie Spark.

Przygotowywanie danych

Podobnie jak w przypadku uczących się modeli w stylu Spark ML, ważne jest ułożenie cech w kolumnie wektorowej. W tym przypadku należy odwołać się do tej kolumny jako "features", która obejmuje wszystkie kolumny z załadowanej ramki danych z wyjątkiem zmiennej docelowej:

from pyspark.ml.feature import VectorAssembler

# Define the name of the target variable column.
labelColumnName = 'target'

# Create a VectorAssembler to consolidate features.
assembler = VectorAssembler(outputCol='features')

# Specify the input columns, excluding the target column.
assembler.setInputCols([c for c in df.columns if c != labelColumnName])

# Transform the dataframe to include the 'features' column.
df_with_features = assembler.transform(df)

W tym fragmencie kodu pokazano, jak używać narzędzia VectorAssembler do prawidłowego tworzenia struktury funkcji na potrzeby późniejszego modelowania opartego na usłudze Spark ML.

Trenowanie modelu

Poniższy kod inicjuje proces tworzenia modelu regresji EBM przy użyciu biblioteki usługi Synapse ML. Najpierw zainicjuj narzędzie do szacowania regresji EBM, określając, że jest przeznaczone do zadania regresji. Następnie ustaw nazwę kolumny etykiety, aby upewnić się, że model wie, którą kolumnę przewidzieć. Na koniec dopasuj model do wstępnie przetworzonego zestawu danych:

# Import the EBMRegression estimator from Synapse ML.
from synapse.ml.ebm import EbmRegression

# Create an instance of the EBMRegression estimator.
estimator = EbmRegression()

# Set the label column for the regression task.
estimator.setLabelCol(labelColumnName)

# Fit the EBM regression model to the prepared dataset.
model = estimator.fit(df_with_features)

Wyświetlanie globalnych wyjaśnień

Aby zwizualizować ogólne wyjaśnienie modelu, możesz uzyskać warstwę wizualizacji i użyć metody show biblioteki interpret. Opakowanie wizualizacji działa jako pomost, aby ułatwić doświadczenie wizualizacji modelu. Oto jak to zrobić:

# Get the visualization wrapper for the model.
wrap = model.getVizWrapper()

# Generate the global explanation.
explanation = wrap.explain_global()

Następnie zaimportuj bibliotekę interpret i użyj metody show, aby wyświetlić wyjaśnienie:

import interpret
interpret.show(explanation)

Termin "ważności" reprezentuje średni bezwzględny wkład (wynik) każdego terminu (cechy lub interakcji) do prognoz. Te wkład są uśrednione w zbiorze danych treningowych, biorąc pod uwagę liczbę próbek w każdym przedziale i wagi próbek (jeśli ma to zastosowanie). W objaśnieniu zostaną wyświetlone 15 najważniejszych terminów.

zrzut ekranu przedstawiający wyjaśnienia globalne.

Wyświetlanie lokalnych wyjaśnień

Podane wyjaśnienia są na poziomie globalnym, ale istnieją scenariusze, w których dane wyjściowe poszczególnych funkcji są również cenne. Zarówno trener, jak i model oferują możliwość ustawienia FeaturesScoresCol, który po wypełnieniu wprowadza kolejną kolumnę wektorową. Każdy wektor w tej kolumnie ma taką samą długość jak kolumna cech, a każda wartość odpowiada funkcji na tym samym indeksie. Te wartości reprezentują wkład każdej funkcji do końcowych danych wyjściowych modelu.

W przeciwieństwie do globalnych wyjaśnień obecnie nie ma bezpośredniej integracji z wizualizacją interpret dla danych wyjściowych poszczególnych funkcji. Wynika to z faktu, że wizualizacje globalne są skalowane głównie w zależności od liczby cech (która jest zwykle niewielka), podczas gdy lokalne wyjaśnienia skalują się z liczbą wierszy (co w przypadku ramki danych Spark może być znaczące).

Poniżej przedstawiono sposób konfigurowania i używania FeaturesScoresCol:

# Set the FeaturesScoresCol to include per-feature outputs.
prediction = model.setFeatureScoresCol("featurescores").transform(df_with_features)

# For small datasets, you can collect the results to a single machine without issues.
# However, for larger datasets, caution should be exercised when collecting all rows locally.
# In this example, we convert to Pandas for easy local inspection.
predictions_pandas = prediction.toPandas()
predictions_list = prediction.collect()

W celach ilustracyjnych wyświetlmy szczegóły pierwszego przykładu:

# Extract the first example from the collected predictions.

first = predictions_list[0]

# Print the lengths of the features and feature scores.
print('Length of the features is', len(first['features']), 'while the feature scores have length', len(first['featurescores']))

# Print the values of the features and feature scores.
print('Features are', first['features'])
print('Feature scores are', first['featurescores'])

Ten fragment kodu pokazuje, jak uzyskać dostęp do wartości funkcji i wyświetlić je oraz odpowiednie wyniki funkcji dla pierwszego przykładu w przewidywaniach. Ten kod generuje następujące dane wyjściowe:

Length of the features is 13 while the feature scores have length 13
Features are [14.23, 1.71, 2.43, 15.6, 127.0, 2.8, 3.06, 0.28, 2.29, 5.64, 1.04, 3.92, 1065.0]
Feature scores are [-0.06610139373422304, -0.06386890875478829, 0.006784629513340544, -0.27503132406909486, -0.017971992178296585, 0.027848245358365248, 0.08691003021839885, -0.09550122309042419, -0.0068259112648438175, -0.04053278237133137, 0.07148173894260551, 0.07739120309898403, -0.0867647572984993]