Share via


Konfigurieren von Trainings-, Validierungs-, Kreuzvalidierungs- und Testdaten in automatisiertem maschinellem Lernen

GILT FÜR:Python SDK azureml v1

In diesem Artikel lernen Sie die verschiedenen Optionen zum Konfigurieren der Aufteilung von Trainings- und Validierungsdaten sowie die Einstellungen für die Kreuzvalidierung für Ihre Experimente mit automatisiertem maschinellem Lernen (automatisiertem ML) kennen.

Wenn Sie in Azure Machine Learning automatisiertes maschinelles Lernen zum Erstellen mehrerer ML-Modelle verwenden, muss jede untergeordnete Ausführung das zugehörige Modell durch Berechnen der Qualitätsmetriken für das Modell validieren, etwa „Genauigkeit“ oder „AUC gewichtet“. Diese Metriken werden durch Vergleichen der mit jedem Modell gemachten Vorhersagen mit realen Bezeichnungen aus Beobachtungen in der Vergangenheit in den Validierungsdaten berechnet. Erfahren Sie mehr darüber, wie Metriken basierend auf dem Validierungstyp berechnet werden.

Experimente mit automatisiertem maschinellem Lernen führen die Modellvalidierung automatisch durch. In den folgenden Abschnitten wird beschrieben, wie Sie die Validierungseinstellungen mit dem Azure Machine Learning Python SDK weiter anpassen können.

Anweisungen zum Arbeiten mit wenig Code oder ohne Code finden Sie unter Erstellen automatisierter Experimente mit maschinellem Lernen in Azure Machine Learning-Studio.

Voraussetzungen

Für diesen Artikel ist Folgendes erforderlich:

Wichtig

Für die Python-Befehle in diesem Artikel ist die neueste azureml-train-automl-Paketversion erforderlich.

Standarddatenaufteilung und Kreuzvalidierung beim maschinellen Lernen

Verwenden Sie das AutoMLConfig-Objekt zum Definieren Ihrer Experiment- und Trainingseinstellungen. Beachten Sie im folgenden Codeausschnitt, dass nur die erforderlichen Parameter definiert sind, d. h., die Parameter für n_cross_validations oder validation_data sind nicht enthalten.

Hinweis

Die Standarddatenaufteilung und Kreuzvalidierung werden in Vorhersageszenarien nicht unterstützt.

data = "https://automlsamplenotebookdata.blob.core.windows.net/automl-sample-notebook-data/creditcard.csv"

dataset = Dataset.Tabular.from_delimited_files(data)

automl_config = AutoMLConfig(compute_target = aml_remote_compute,
                             task = 'classification',
                             primary_metric = 'AUC_weighted',
                             training_data = dataset,
                             label_column_name = 'Class'
                            )

Wenn Sie weder einen validation_data- noch einen n_cross_validations-Parameter explizit angeben, wendet die automatisierte ML Standardtechniken an, die von der Anzahl der im Einzeldatensatz training_data angegebenen Zeilen abhängen.

Umfang der Trainingsdaten Validierungsverfahren
Mehr als 20.000 Zeilen Es wird eine Aufteilung in Trainings- und Validierungsdaten vorgenommen. Standardmäßig werden 10 % des ursprünglichen Trainingsdatasets als Validierungsset verwendet. Dieses Validierungsset wird seinerseits für die Metrikberechnung verwendet.
Weniger als 20.000 Zeilen Der Kreuzvalidierungsansatz wird angewendet. Die Standardanzahl der Faltungen (Folds) hängt von der Zeilenanzahl ab.
Wenn das Dataset weniger als 1.000 Zeilen aufweist, werden 10 Faltungen verwendet.
Wenn die Anzahl der Zeilen zwischen 1.000 und 20.000 liegt, werden drei Faltungen verwendet.

Bereitstellen von Validierungsdaten

In diesem Fall können Sie entweder von einer einzelnen Datendatei ausgehen, die Sie in Trainings- und Validierungsdatasets aufteilen, oder Sie können für den Validierungssatz eine separate Datendatei bereitstellen. In beiden Fällen weist der Parameter validation_data in Ihrem AutoMLConfig-Objekt die Daten zu, die als Validierungsset verwendet werden. Dieser Parameter akzeptiert nur Datasets in der Form eines Azure Machine Learning-Datasets oder eines Pandas-Dataframes.

Hinweis

Für den Parameter validation_data müssen die Parameter training_data und label_column_name ebenfalls festgelegt werden. Sie können nur einen Validierungsparameter festlegen, d. h., Sie können nur oder und validation_datan_cross_validations nicht beide angeben.

Im folgenden Codebeispiel ist explizit definiert, welcher Teil der bereitgestellten Daten in dataset zum Training und welcher zur Validierung verwendet wird.

data = "https://automlsamplenotebookdata.blob.core.windows.net/automl-sample-notebook-data/creditcard.csv"

dataset = Dataset.Tabular.from_delimited_files(data)

training_data, validation_data = dataset.random_split(percentage=0.8, seed=1)

automl_config = AutoMLConfig(compute_target = aml_remote_compute,
                             task = 'classification',
                             primary_metric = 'AUC_weighted',
                             training_data = training_data,
                             validation_data = validation_data,
                             label_column_name = 'Class'
                            )

Angeben der Größe des Validierungssets

In diesem Fall wird nur ein einzelnes Dataset für das Experiment bereitgestellt. Das heißt, der validation_data-Parameter wird nicht angegeben, und das bereitgestellte Dataset wird dem Parameter training_data zugewiesen.

In Ihrem AutoMLConfig-Objekt können Sie den Parameter validation_size so festlegen, dass er einen Teil der Trainingsdaten für die Validierung reserviert. Das bedeutet, dass der Validierungssatz durch das automatisierte maschinelle Lernen von den ursprünglich bereitgestellten Trainingsdaten (training_data) getrennt wird. Dieser Wert sollte zwischen 0,0 und 1.0 ausschließlich betragen (beispielsweise bedeutet 0,2, dass 20 % der Daten als Validierungsdaten zurückgehalten werden).

Hinweis

Der Parameter validation_size wird in Vorhersageszenarien nicht unterstützt.

Betrachten Sie das folgende Codebeispiel:

data = "https://automlsamplenotebookdata.blob.core.windows.net/automl-sample-notebook-data/creditcard.csv"

dataset = Dataset.Tabular.from_delimited_files(data)

automl_config = AutoMLConfig(compute_target = aml_remote_compute,
                             task = 'classification',
                             primary_metric = 'AUC_weighted',
                             training_data = dataset,
                             validation_size = 0.2,
                             label_column_name = 'Class'
                            )

K-fache Kreuzvalidierung

Um eine k-fache Kreuzvalidierung durchzuführen, schließen Sie den Parameter n_cross_validations ein, und legen Sie ihn auf einen Wert fest. Dieser Parameter legt fest, wie viele Kreuzvalidierungen durchgeführt werden, ausgehend von der gleichen Anzahl der Faltungen.

Hinweis

Der Parameter n_cross_validations wird in Klassifizierungsszenarien mit Deep Neural Networks nicht unterstützt. Für Vorhersageszenarien finden Sie Informationen zur Kreuzvalidierung unter Einrichten von AutoML zum Trainieren eines Zeitreihenvorhersagemodells.

Im folgenden Code werden fünf Faltungen für die Kreuzvalidierung definiert. Es ergeben sich also fünf verschiedene Trainings, von denen jedes 4/5 der Daten und jede Validierung 1/5 der Daten mit einer pro Durchgang verschiedenen Faltung der zurückgehaltenen Daten verwendet.

Als Ergebnis werden Metriken mit dem Durchschnitt der fünf Validierungsmetriken berechnet.

data = "https://automlsamplenotebookdata.blob.core.windows.net/automl-sample-notebook-data/creditcard.csv"

dataset = Dataset.Tabular.from_delimited_files(data)

automl_config = AutoMLConfig(compute_target = aml_remote_compute,
                             task = 'classification',
                             primary_metric = 'AUC_weighted',
                             training_data = dataset,
                             n_cross_validations = 5
                             label_column_name = 'Class'
                            )

Monte Carlo-Kreuzvalidierung

Für eine Monte Carlo-Kreuzvalidierung müssen die beiden Parameter validation_size und n_cross_validations in das Objekt AutoMLConfig eingeschlossen werden.

Bei der Monte Carlo-Kreuzvalidierung stellt das automatisierte maschinelle Lernen den durch den Parameter validation_size angegebenen Teil der Trainingsdaten für die Validierung zurück und weist die restlichen Daten zu Trainingszwecken zu. Dieser Prozess wird dann basierend auf dem im Parameter n_cross_validations angegebenen Wert wiederholt. Dabei werden jedes Mal nach dem Zufallsprinzip neue Trainings- und Validierungsaufteilungen generiert.

Hinweis

Die Monte Carlo-Kreuzvalidierung wird in Vorhersageszenarien nicht unterstützt.

Der folgende Code definiert eine siebenfache Kreuzvalidierung, und 20 Prozent der Trainingsdaten sollen für die Validierung verwendet werden. Es ergeben sich also sieben verschiedene Trainings. Dabei werden jeweils 80 Prozent der Daten für das Training verwendet und 20 Prozent zur Validierung mit jeweils anderen zurückgehaltenen Daten.

data = "https://automlsamplenotebookdata.blob.core.windows.net/automl-sample-notebook-data/creditcard.csv"

dataset = Dataset.Tabular.from_delimited_files(data)

automl_config = AutoMLConfig(compute_target = aml_remote_compute,
                             task = 'classification',
                             primary_metric = 'AUC_weighted',
                             training_data = dataset,
                             n_cross_validations = 7
                             validation_size = 0.2,
                             label_column_name = 'Class'
                            )

Angeben benutzerdefinierter Faltungen für die Kreuzvalidierung

Sie können außerdem eigene Datenfaltungen für die Kreuzvalidierung (Cross-Validation, CV) angeben. Dies wird als fortgeschrittenes Szenario angesehen, da Sie angeben, welche Spalten aufgeteilt und zur Validierung verwendet werden sollen. Nehmen Sie benutzerdefinierte aufgeteilte CV-Spalten in Ihre Trainingsdaten auf, und geben Sie die Spalten an, indem Sie die Spaltennamen in den cv_split_column_names-Parameter einsetzen. Jede Spalte stellt eine Kreuzvalidierungsaufteilung dar und enthält die Integerwerte 1 oder 0. Dabei gibt 1 an, dass die Zeile zum Training verwendet werden soll, und 0, dass die Zeile zur Validierung verwendet werden soll.

Hinweis

Der Parameter cv_split_column_names wird in Vorhersageszenarien nicht unterstützt.

Der folgende Codeausschnitt enthält Marketingdaten einer Bank mit zwei CV-Aufteilungsspalten ‚cv1‘ und ‚cv2‘.

data = "https://automlsamplenotebookdata.blob.core.windows.net/automl-sample-notebook-data/bankmarketing_with_cv.csv"

dataset = Dataset.Tabular.from_delimited_files(data)

automl_config = AutoMLConfig(compute_target = aml_remote_compute,
                             task = 'classification',
                             primary_metric = 'AUC_weighted',
                             training_data = dataset,
                             label_column_name = 'y',
                             cv_split_column_names = ['cv1', 'cv2']
                            )

Hinweis

Um cv_split_column_names mit training_data und label_column_name zu verwenden, führen Sie ein Upgrade Ihres Azure Machine Learning Python SDK auf Version 1.6.0 oder höher durch. Informieren Sie sich für frühere SDK-Versionen über die Verwendung von cv_splits_indices, beachten Sie aber, dass dies nur in Verbindung mit der X- und y-Eingabe von Datasets verwendet wird.

Metrikberechnung für die Kreuzvalidierung beim maschinellen Lernen

Wenn die k-fache Kreuzvalidierung oder die Monte Carlo-Kreuzvalidierung verwendet wird, werden Metriken für jeden Validierungsteil berechnet und anschließend aggregiert. Der Aggregationsvorgang ist bei skalaren Metriken ein Mittelwert und bei Diagrammen eine Summe. Die bei der Kreuzvalidierung berechneten Metriken basieren auf allen Aufteilungen und somit auf allen Stichproben aus dem Trainingssatz. Weitere Informationen zu Metriken beim automatisierten maschinellen Lernen.

Wenn ein benutzerdefinierter Validierungssatz oder ein automatisch ausgewählter Validierungssatz verwendet wird, werden die Metriken zur Modellauswertung nur mit diesem Validierungssatz berechnet und nicht mit den Trainingsdaten.

Testdaten bereitstellen (Vorschau)

Wichtig

Dieses Feature ist zurzeit als öffentliche Preview verfügbar. Diese Vorschauversion wird ohne Vereinbarung zum Servicelevel bereitgestellt und ist nicht für Produktionsworkloads vorgesehen. Manche Features werden möglicherweise nicht unterstützt oder sind nur eingeschränkt verwendbar.

Weitere Informationen finden Sie unter Zusätzliche Nutzungsbestimmungen für Microsoft Azure-Vorschauen.

Sie können auch Testdaten bereitstellen, um das empfohlene Modell auszuwerten, das automatisierte ML nach Abschluss des Experiments für Sie generiert. Wenn Sie Testdaten bereitstellen, werden diese getrennt von Trainings- und Validierungsdaten betrachtet, um die Ergebnisse des Testlaufs des empfohlenen Modells nicht zu verfälschen. Erfahren Sie mehr über Trainings-, Validierungs- und Testdaten in automatisierten ML.

Testdatasets müssen in Form eines Azure Machine Learning TabularDatasetvorliegen. Sie können ein Testdataset mit den test_data Parametern und test_size in Ihrem AutoMLConfig -Objekt angeben. Diese Parameter schließen sich gegenseitig aus und können nicht gleichzeitig oder mit cv_split_column_names oder cv_splits_indices angegeben werden.

Geben Sie mit dem test_data Parameter ein vorhandenes Dataset an, das an Ihr Objekt übergeben werden AutoMLConfig soll.

automl_config = AutoMLConfig(task='forecasting',
                             ...
                             # Provide an existing test dataset
                             test_data=test_dataset,
                             ...
                             forecasting_parameters=forecasting_parameters)

Verwenden Sie beim Erstellen den Parameter , um eine Train/Test-Aufteilung zu verwenden, anstatt Testdaten direkt test_sizeAutoMLConfig bereitzustellen. Dieser Parameter muss ein Gleitkommawert zwischen ausschließlich 0,0 und 1,0 sein und gibt den Prozentsatz des Trainingsdatensatzes an, der für den Testdatensatz verwendet werden soll.

automl_config = AutoMLConfig(task = 'regression',
                             ...
                             # Specify train/test split
                             training_data=training_data,
                             test_size=0.2)

Hinweis

Für Regressionsaufgaben wird eine Zufallsstichprobe verwendet.
Für Klassifizierungsaufgaben werden geschichtete Stichproben verwendet, aber auch Zufallsstichproben, wenn eine geschichtete Stichprobe nicht durchführbar ist.
Die Vorhersage unterstützt derzeit nicht die Angabe eines Testdatensatzes mit einer Aufteilung in Training und Test mit dem Parameter test_size.

Wenn sie die test_data Parameter oder test_size an AutoMLConfig übergeben, wird nach Abschluss des Experiments automatisch ein Remotetestlauf ausgelöst. In diesem Testlauf werden die bereitgestellten Testdaten verwendet, um das beste Modell auszuwerten, das von automatisierten ML empfohlen wird. Erfahren Sie mehr über das Abrufen der Vorhersagen aus dem Testlauf.

Nächste Schritte