Freigeben über


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

GILT FÜR: Python SDK azureml v1

In diesem Artikel werden 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) beschrieben. Wenn Sie in Azure Machine Learning automatisiertes maschinelles Lernen zum Erstellen mehrerer Machine Learning-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. 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 anpassen können. Weitere Informationen dazu, wie Metriken basierend auf dem Überprüfungstyp berechnet werden, finden Sie im Abschnitt Festlegen der Metrikberechnung für die Kreuzvalidierung. Wenn Sie sich für Low-Code- oder No-Code-Umgebungen interessieren, finden Sie dazu unter Erstellen von Experimenten mit automatisiertem maschinellem Lernen in Azure Machine Learning Studio weitere Informationen.

Voraussetzungen

Wichtig

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

Festlegen von Standarddatenaufteilung und Kreuzvalidierung beim maschinellen Lernen

Verwenden Sie zum Festlegen von Standarddatenaufteilungen und Kreuzvalidierung beim maschinellen Lernen das Klassenobjekt AutoMLConfig, um Experiment- und Trainingseinstellungen zu definieren. Im folgenden Beispiel werden nur die erforderlichen Parameter festgelegt. Die Parameter n_cross_validations und 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 nicht explizit den Parameter validation_data oder n_cross_validations angeben, wendet automatisiertes maschinelles Lernen Standardverfahren an, die von der Anzahl der Zeilen im übergebenen einzelnen Dataset training_data 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 eines Validierungsdataset

Sie haben zwei Optionen zum Bereitstellen von Validierungsdaten. Sie können von einer einzelnen Datendatei ausgehen und 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.

Im Folgenden finden Sie einige weitere Überlegungen zum Arbeiten mit Validierungsparametern:

  • Sie können nur einen Überprüfungsparameter festlegen, entweder den Parameter validation_data oder den Parameter n_cross_validations, aber nicht beide.
  • Wenn Sie den Parameter validation_data verwenden, müssen Sie auch die Parameter training_data und label_column_name angeben.

Im folgenden Beispiel ist explizit definiert, welcher Teil von dataset zum Training (training_data) und welcher zur Validierung (validation_data) 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 Validierungsdatasetgröße

Wenn Sie die Größe des Validierungssatzes angeben, geben Sie nur ein einzelnes Dataset für das Experiment an. 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. Bei dieser Strategie trennt der Auftrag für automatisiertes ML den Validierungssatz von den ursprünglichen Trainingsdaten (training_data), die Sie bereitstellen. Der 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.

Im folgenden Beispiel wird ein einzelnes Dataset (dataset) für das Experiment verwendet. training_data greift auf das vollständige Dataset zu, und 20 % des Dataset werden für die Validierung zugewiesen (validation_size = 0.2):

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'
                            )

Ausführen der k-fachen Kreuzvalidierung

Um eine k-fache Kreuzvalidierung durchzuführen, schließen Sie den Parameter n_cross_validations ein, und legen Sie die Anzahl der Faltungen 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 (DNN) nicht unterstützt.

Für Vorhersageszenarien finden Sie Informationen zur Kreuzvalidierung unter Einrichten von AutoML zum Trainieren eines Zeitreihenvorhersagemodells.

Im folgenden Beispiel werden fünf Faltungen für die Kreuzvalidierung definiert. Der Prozess führt fünf verschiedene Trainings aus, bei denen jedes Training 4/5 der Daten verwendet. Jede Validierung verwendet 1/5 der Daten mit einer pro Durchgang verschiedenen Faltung der zurückgehaltenen Daten. 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'
                            )

Ausführen der 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.

Das folgende Beispiel definiert sieben Faltungen für die Kreuzvalidierung, und 20 Prozent der Trainingsdaten sollen für die Validierung verwendet werden. Der Prozess führt sieben verschiedene Trainings aus, bei denen jedes Training 80 % der Daten verwendet. Jede Validierung verwendet 20 % der Daten mit einer pro Durchgang verschiedenen Faltung der 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. Dieser Ansatz wird als fortgeschrittenes Szenario angesehen, da Sie angeben, welche Spalten aufgeteilt und zur Validierung verwendet werden sollen. Sie nehmen benutzerdefinierte aufgeteilte CV-Spalten in Ihre Trainingsdaten auf und geben die Spalten an, indem Sie die Spaltennamen in den cv_split_column_names-Parameter einsetzen. Jede Spalte stellt eine Kreuzvalidierungsaufteilung dar und weist einen ganzzahligen Wert von 1 oder 0 auf. Der Wert 1 gibt an, dass die Zeile für das Training verwendet werden soll. Der Wert 0 gibt an, dass die Zeile für die Validierung verwendet werden soll.

Hinweis

Der Parameter cv_split_column_names wird in Vorhersageszenarien nicht unterstützt.

Das folgende Beispiel 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.

Festlegen der Metrikberechnung für die Kreuzvalidierung

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 finden Sie unter Auswerten der Ergebnisse von Experimenten des automatisierten maschinellen Lernens.

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.

Bereitstellen eines Testdataset (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 die Daten getrennt von Trainings- und Validierungsdaten betrachtet, um zu verhindern, dass die Ergebnisse des Testlaufs des empfohlenen Modells verzerrt werden. Weitere Informationen finden Sie unter Schulungs-, Validierungs- und Testdaten.

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 dem Parameter cv_split_column_names oder cv_splits_indices angegeben werden.

Geben Sie in Ihrem AutoMLConfig-Objekt mit dem Parameter test_data ein vorhandenes Dataset an:

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 0,0 und 1,0 (ausschließlich) sein. Er gibt den Prozentsatz des Trainingsdataset an, der für das Testdataset verwendet werden soll.

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

Im Folgenden finden Sie einige weitere Überlegungen zum Arbeiten mit Testdatasets:

  • 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.

Hinweis

Sie können in Vorhersageszenarien mit dem Parameter test_size derzeit kein Testdataset mit einer Aufteilung in Training und Test angeben.

Wenn Sie den Parameter test_data oder test_size an das AutoMLConfig-Objekt ü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. Weitere Informationen finden Sie unter Abrufen von Testauftragsergebnissen.