Training, validatie, kruisvalidatie en testgegevens configureren in geautomatiseerde machine learning

VAN TOEPASSING OP:Python SDK azureml v1

In dit artikel leert u de verschillende opties voor het configureren van splitsingen van trainingsgegevens en validatiegegevens, samen met instellingen voor kruisvalidatie voor uw geautomatiseerde machine learning, geautomatiseerde ML en experimenten.

Wanneer u in Azure Machine Learning geautomatiseerde ML gebruikt om meerdere ML-modellen te bouwen, moet elke onderliggende uitvoering het gerelateerde model valideren door de metrische kwaliteitsgegevens voor dat model te berekenen, zoals nauwkeurigheid of AUC-gewogen. Deze metrische gegevens worden berekend door de voorspellingen die zijn gedaan met elk model te vergelijken met echte labels uit eerdere waarnemingen in de validatiegegevens. Meer informatie over hoe metrische gegevens worden berekend op basis van het validatietype.

Geautomatiseerde ML-experimenten voeren modelvalidatie automatisch uit. In de volgende secties wordt beschreven hoe u validatie-instellingen verder kunt aanpassen met de Azure Machine Learning Python SDK.

Zie Uw geautomatiseerde machine learning-experimenten maken in Azure Machine Learning-studio voor een ervaring met weinig of geen code.

Vereisten

Voor dit artikel hebt u nodig:

Belangrijk

Voor de Python-opdrachten in dit artikel is de nieuwste azureml-train-automl pakketversie vereist.

Standaardgegevenssplitsingen en kruisvalidatie in machine learning

Gebruik het autoMLConfig-object om uw experiment- en trainingsinstellingen te definiëren. In het volgende codefragment ziet u dat alleen de vereiste parameters zijn gedefinieerd. Dit zijn de parameters voor n_cross_validations of validation_datazijn niet opgenomen.

Notitie

De standaardgegevenssplitsingen en kruisvalidatie worden niet ondersteund in prognosescenario's.

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

Als u niet expliciet een validation_data of n_cross_validations parameter opgeeft, past geautomatiseerde ML standaardtechnieken toe, afhankelijk van het aantal rijen dat is opgegeven in de individuele gegevensset training_data.

Grootte van trainingsgegevens Validatietechniek
Groter dan 20.000 rijen De splitsing van train-/validatiegegevens wordt toegepast. De standaardinstelling is dat 10% van de set met initiële trainingsgegevens als validatieset wordt gebruikt. Die validatieset wordt op zijn beurt gebruikt voor de berekening van metrische gegevens.
Kleiner dan 20.000 rijen Er wordt een benadering voor kruisvalidatie toegepast. Het standaardaantal vouwen is afhankelijk van het aantal rijen.
Als de gegevensset kleiner is dan 1000 rijen, worden 10 vouwen gebruikt.
Als de rijen tussen 1.000 en 20.000 liggen, worden drie keer gebruikt.

Validatiegegevens opgeven

In dit geval kunt u beginnen met één gegevensbestand en dit opsplitsen in trainings- en validatiegegevenssets of u kunt een afzonderlijk gegevensbestand voor de validatieset opgeven. In beide gevallen wijst de validation_data parameter in uw AutoMLConfig object toe welke gegevens als uw validatieset moeten worden gebruikt. Deze parameter accepteert alleen gegevenssets in de vorm van een Azure Machine Learning-gegevensset of pandas-dataframe.

Notitie

Voor de validation_data parameter moeten de training_data parameters en label_column_name ook worden ingesteld. U kunt slechts één validatieparameter instellen, dat wil dat u alleen een of validation_datan_cross_validations, niet beide kunt opgeven.

In het volgende codevoorbeeld wordt expliciet gedefinieerd welk deel van de opgegeven gegevens moet dataset worden gebruikt voor training en validatie.

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

Geef de grootte van de validatieset op

In dit geval wordt slechts één gegevensset opgegeven voor het experiment. Dat wil dat de validation_data parameter niet is opgegeven en dat de opgegeven gegevensset wordt toegewezen aan de training_data parameter.

In uw AutoMLConfig object kunt u instellen dat de validation_size parameter een deel van de trainingsgegevens bevat voor validatie. Dit betekent dat de validatieset wordt gesplitst door geautomatiseerde ML van de oorspronkelijke training_data opgegeven. Deze waarde moet tussen 0,0 en 1,0 niet-inclusief zijn (0,2 betekent bijvoorbeeld dat 20% van de gegevens wordt gebruikt voor validatiegegevens).

Notitie

De validation_size parameter wordt niet ondersteund in scenario's voor prognoses.

Zie het volgende codevoorbeeld:

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-voudige kruisvalidatie

Als u k-fold kruisvalidatie wilt uitvoeren, neemt u de n_cross_validations parameter op en stelt u deze in op een waarde. Met deze parameter wordt ingesteld hoeveel kruisvalidaties moeten worden uitgevoerd, op basis van hetzelfde aantal vouwen.

Notitie

De n_cross_validations parameter wordt niet ondersteund in classificatiescenario's die gebruikmaken van diepe neurale netwerken. Zie hoe kruisvalidatie wordt toegepast in AutoML instellen voor het trainen van een tijdreeksprognosemodel voor prognosescenario's.

In de volgende code worden vijf vouwen voor kruisvalidatie gedefinieerd. Daarom zijn er vijf verschillende trainingen, waarbij elke training 4/5 van de gegevens gebruikt en elke validatie 1/5 van de gegevens gebruikt met elke keer een andere holdout-vouw.

Als gevolg hiervan worden metrische gegevens berekend met het gemiddelde van de vijf metrische validatiegegevens.

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 kruisvalidatie

Als u Monte Carlo-kruisvalidatie wilt uitvoeren, neemt u zowel de validation_sizen_cross_validations parameters als op in uw AutoMLConfig object.

Voor Monte Carlo-kruisvalidatie wordt door geautomatiseerde ML het gedeelte van de trainingsgegevens dat is opgegeven door de validation_size parameter voor validatie, gereserveerd en wordt vervolgens de rest van de gegevens voor training toegewezen. Dit proces wordt vervolgens herhaald op basis van de waarde die is opgegeven in de n_cross_validations parameter; waarmee elke keer nieuwe trainings- en validatiesplitsingen worden gegenereerd, willekeurig.

Notitie

De Monte Carlo-kruisvalidatie wordt niet ondersteund in scenario's met prognoses.

De volgende code definieert, 7 vouwen voor kruisvalidatie en 20% van de trainingsgegevens moeten worden gebruikt voor validatie. Daarom zijn er 7 verschillende trainingen, elke training gebruikt 80% van de gegevens en elke validatie gebruikt 20% van de gegevens met elke keer een andere holdout-vouw.

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

Aangepaste gegevensvouwen voor kruisvalidatie opgeven

U kunt ook uw eigen gegevensvouwen voor kruisvalidatie (CV) opgeven. Dit wordt beschouwd als een geavanceerder scenario omdat u opgeeft welke kolommen u wilt splitsen en gebruiken voor validatie. Neem aangepaste gesplitste cv-kolommen op in uw trainingsgegevens en geef op welke kolommen door de kolomnamen in de cv_split_column_names parameter in te vullen. Elke kolom vertegenwoordigt één kruisvalidatiesplitsing en is gevuld met gehele getallen 1 of 0, waarbij 1 aangeeft dat de rij moet worden gebruikt voor training en 0 aangeeft dat de rij moet worden gebruikt voor validatie.

Notitie

De cv_split_column_names parameter wordt niet ondersteund in scenario's voor prognoses.

Het volgende codefragment bevat bankmarketinggegevens met twee CV-splitsingskolommen 'cv1' en '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']
                            )

Notitie

Als u met training_data en label_column_namewilt gebruikencv_split_column_names, moet u uw Azure Machine Learning Python SDK versie 1.6.0 of hoger upgraden. Voor eerdere SDK-versies raadpleegt u het gebruik van cv_splits_indices, maar houd er rekening mee dat deze alleen wordt gebruikt met X gegevenssetinvoer en y .

Metrische berekening voor kruisvalidatie in machine learning

Wanneer k-fold- of Monte Carlo-kruisvalidatie wordt gebruikt, worden metrische gegevens berekend op elke validatievouw en vervolgens geaggregeerd. De aggregatiebewerking is een gemiddelde voor scalaire metrische gegevens en een som voor grafieken. Metrische gegevens die tijdens de kruisvalidatie worden berekend, zijn gebaseerd op alle vouwen en dus alle voorbeelden uit de trainingsset. Meer informatie over metrische gegevens in geautomatiseerde machine learning.

Wanneer een aangepaste validatieset of een automatisch geselecteerde validatieset wordt gebruikt, worden metrische modelevaluatiegegevens alleen berekend op basis van die validatieset, niet de trainingsgegevens.

Testgegevens opgeven (preview)

Belangrijk

Deze functie is momenteel beschikbaar als openbare preview-versie. Deze preview-versie wordt geleverd zonder serviceovereenkomst en wordt niet aanbevolen voor productieworkloads. Misschien worden bepaalde functies niet ondersteund of zijn de mogelijkheden ervan beperkt.

Zie Supplemental Terms of Use for Microsoft Azure Previews (Aanvullende gebruiksvoorwaarden voor Microsoft Azure-previews) voor meer informatie.

U kunt ook testgegevens opgeven om het aanbevolen model te evalueren dat geautomatiseerde ML voor u genereert wanneer het experiment is voltooid. Wanneer u testgegevens opgeeft, wordt dit beschouwd als een los van training en validatie, zodat de resultaten van de testuitvoering van het aanbevolen model niet worden beïnvloed. Meer informatie over training, validatie en testgegevens in geautomatiseerde ML.

Testgegevenssets moeten de vorm hebben van een Azure Machine Learning TabularDataset. U kunt een testgegevensset opgeven met de test_data parameters en test_size in uw AutoMLConfig -object. Deze parameters sluiten elkaar wederzijds uit en kunnen niet tegelijkertijd of met cv_split_column_names of cv_splits_indicesworden opgegeven.

Geef met de test_data parameter een bestaande gegevensset op die moet worden doorgegeven aan uw AutoMLConfig object.

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

Als u een split train/test wilt gebruiken in plaats van rechtstreeks testgegevens op te geven, gebruikt u de test_size parameter bij het maken van de AutoMLConfig. Deze parameter moet een drijvendekommage-waarde zijn tussen 0,0 en 1,0 en geeft het percentage van de trainingsgegevensset op dat moet worden gebruikt voor de testgegevensset.

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

Notitie

Voor regressietaken wordt willekeurige steekproeven gebruikt.
Voor classificatietaken wordt gestratificeerde steekproeven gebruikt, maar willekeurige steekproeven worden gebruikt als een terugval wanneer gelaagde steekproeven niet haalbaar zijn.
Prognose biedt momenteel geen ondersteuning voor het opgeven van een testgegevensset met behulp van een train/test-splitsing met de test_size parameter .

Als u de test_data parameters of test_size doorgeeft aan de AutoMLConfig, wordt automatisch een externe testuitvoering geactiveerd na voltooiing van uw experiment. Deze testuitvoering maakt gebruik van de opgegeven testgegevens om het beste model te evalueren dat geautomatiseerde ML aanbeveelt. Meer informatie over het ophalen van de voorspellingen van de testuitvoering.

Volgende stappen