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:
Een Azure Machine Learning-werkruimte. Zie Werkruimteresources maken om de werkruimte te maken.
Bekendheid met het instellen van een geautomatiseerd machine learning-experiment met de Azure Machine Learning SDK. Volg de zelfstudie of instructies om de fundamentele ontwerppatronen voor geautomatiseerde machine learning-experimenten te bekijken.
Inzicht in het splitsen van training/validatiegegevens en kruisvalidatie als machine learning-concepten. Voor een uitleg op hoog niveau,
Belangrijk
Voor de Python-opdrachten in dit artikel is de nieuwste azureml-train-automl
pakketversie vereist.
- Installeer het nieuwste
azureml-train-automl
pakket in uw lokale omgeving. - Zie de opmerkingen bij de release voor meer informatie over het nieuwste
azureml-train-automl
pakket.
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_data
zijn 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_data
n_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_size
n_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_name
wilt 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.
Waarschuwing
Deze functie is niet beschikbaar voor de volgende geautomatiseerde ML-scenario's
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_indices
worden 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.