Azure Machine Learning-gegevenssets maken
VAN TOEPASSING OP: Python SDK azureml v1
In dit artikel leert u hoe u Azure Machine Learning-gegevenssets maakt voor toegang tot gegevens voor uw lokale of externe experimenten met de Azure Machine Learning Python SDK. Ga naar het artikel Over veilige toegang tot gegevens voor meer informatie over hoe gegevenssets passen in de algemene werkstroom voor gegevenstoegang van Azure Machine Learning.
Wanneer u een gegevensset maakt, maakt u een verwijzing naar de locatie van de gegevensbron, samen met een kopie van de metagegevens. Omdat de gegevens zich op de bestaande locatie bevinden, worden er geen extra opslagkosten in rekening gebracht en loopt u geen risico op de integriteit van uw gegevensbronnen. Daarnaast worden gegevenssets lazily geëvalueerd, waardoor de prestaties van de werkstroom sneller kunnen worden verbeterd. U kunt gegevenssets maken op basis van gegevensarchieven, openbare URL's en Azure Open Datasets. Ga naar Azure Machine Learning-gegevenssets maken met de Azure Machine Learning-studio voor informatie over een ervaring met weinig code.
Met Azure Machine Learning-gegevenssets kunt u het volgende doen:
Eén kopie van gegevens in uw opslag behouden, waarnaar wordt verwezen door gegevenssets
Krijg naadloos toegang tot gegevens tijdens modeltraining zonder dat u zich zorgen hoeft te maken over verbindingsreeks s of gegevenspaden. Ga voor meer informatie over het trainen van gegevenssets naar Meer informatie over het trainen met gegevenssets
Gegevens delen en samenwerken met andere gebruikers
Belangrijk
Items in dit artikel die zijn gemarkeerd als 'preview', zijn momenteel beschikbaar als openbare preview. De preview-versie wordt aangeboden zonder Service Level Agreement en wordt niet aanbevolen voor productieworkloads. Misschien worden bepaalde functies niet ondersteund of zijn de mogelijkheden ervan beperkt. Zie Aanvullende gebruiksvoorwaarden voor Microsoft Azure-previews voor meer informatie.
Vereisten
Als u gegevenssets wilt maken en ermee wilt werken, hebt u het volgende nodig:
Een Azure-abonnement. Als u nog geen abonnement hebt, maakt u een gratis account voordat u begint. Probeer de gratis of betaalde versie van Azure Machine Learning
De Azure Machine Learning SDK voor Python is geïnstalleerd, waaronder het pakket azureml-datasets
Een Azure Machine Learning-rekenproces maken, een volledig geconfigureerde en beheerde ontwikkelomgeving met geïntegreerde notebooks en de SDK die al is geïnstalleerd
OF
Werk zelf aan uw eigen Jupyter-notebook en installeer de SDK zelf
Notitie
Sommige gegevenssetklassen hebben afhankelijkheden van het pakket azureml-dataprep , dat alleen compatibel is met 64-bits Python. Als u in Linux ontwikkelt, zijn deze klassen afhankelijk van .NET Core 2.1 en ondersteunen ze alleen specifieke distributies. Lees de kolom .NET Core 2.1 in het artikel .NET Core 2.1 installeren in Linux voor meer informatie over de ondersteunde distributies.
Belangrijk
Hoewel het pakket kan werken in oudere versies van Linux-distributies, raden we u niet aan om een distributie te gebruiken die buiten de basisondersteuning valt. Distributies die buiten de basisondersteuning vallen, kunnen beveiligingsproblemen hebben, omdat ze de meest recente updates niet ontvangen. U wordt aangeraden de meest recente ondersteunde versie van uw distributie te gebruiken die compatibel is met .
Richtlijnen voor rekenkracht
Wanneer u een gegevensset maakt, controleert u de rekenkracht en de grootte van uw gegevens in het geheugen. De grootte van uw gegevens in de opslag is niet hetzelfde als de grootte van gegevens in een dataframe. Gegevens in CSV-bestanden kunnen bijvoorbeeld maximaal 10 keer in een dataframe worden uitgebreid, zodat een CSV-bestand van 1 GB 10 GB kan worden in een dataframe.
Gecomprimeerde gegevens kunnen verder worden uitgebreid. Twintig GB relatief geparseerde gegevens die zijn opgeslagen in een gecomprimeerde parquet-indeling, kunnen worden uitgebreid tot ~800 GB in het geheugen. Omdat Parquet-bestanden gegevens opslaan in een kolomindeling, hoeft u alleen ~400 GB in het geheugen te laden als u slechts de helft van de kolommen nodig hebt.
Ga voor meer informatie naar Meer informatie over het optimaliseren van gegevensverwerking in Azure Machine Learning.
Gegevenssettypen
Er zijn twee typen gegevenssets op basis van hoe gebruikers gegevenssets gebruiken in de training: FileDatasets en TabularDatasets. Azure Machine Learning-trainingswerkstromen die betrekking hebben op schattingen, AutoML, hyperDrive en pijplijnen kunnen beide typen gebruiken.
FileDataset
Een FileDataset verwijst naar één of meerdere bestanden in uw gegevensarchieven of openbare URL's. Als uw gegevens al zijn opgeschoond en klaar zijn voor gebruik in trainingsexperimenten, kunt u de bestanden downloaden of koppelen aan uw berekening als een FileDataset-object.
We raden FileDatasets aan voor uw machine learning-werkstromen, omdat de bronbestanden in elke indeling kunnen zijn. Dit maakt een breder scala aan machine learning-scenario's mogelijk, waaronder deep learning.
Maak een FileDataset met de Python SDK of de Azure Machine Learning-studio.
TabularDataset
Een TabularDataset parseert het opgegeven bestand of de opgegeven lijst met bestanden om gegevens in tabelvorm weer te geven. U kunt de gegevens vervolgens materialiseren in een pandas of Spark DataFrame om te werken met vertrouwde gegevensvoorbereidings- en trainingsbibliotheken terwijl u in uw notebook blijft. U kunt een TabularDataset
object maken op basis van .csv, .tsv, .parquet, .json lijnbestanden en uit SQL-queryresultaten.
Met TabularDatasets kunt u een tijdstempel opgeven uit een kolom in de gegevens, of van de locatie waar de padpatroongegevens zijn opgeslagen, om een tijdreekskenmerk in te schakelen. Met deze specificatie kunt u eenvoudig en efficiënt filteren op tijd. Ga bijvoorbeeld naar de API-demo met betrekking tot tabellaire tijdreeksen met NOAA-weergegevens.
Maak een TabularDataset met de Python SDK of Azure Machine Learning-studio.
Notitie
Geautomatiseerde ML-werkstromen die worden gegenereerd via de Azure Machine Learning-studio bieden momenteel alleen ondersteuning voor TabularDatasets.
Voor TabularDatasets die zijn gegenereerd op basis van SQL-queryresultaten, wordt T-SQL (bijvoorbeeld 'WITH'-subquery) of dubbele kolomnamen niet ondersteund. Complexe T-SQL-query's kunnen prestatieproblemen veroorzaken. Dubbele kolomnamen in een gegevensset kunnen dubbelzinnigheidsproblemen veroorzaken.
Toegang tot gegevenssets in een virtueel netwerk
Als uw werkruimte zich in een virtueel netwerk bevindt, moet u de gegevensset configureren om validatie over te slaan. Ga naar Een werkruimte en bijbehorende resources beveiligen voor meer informatie over het gebruik van gegevensarchieven en gegevenssets in een virtueel netwerk.
Gegevenssets maken uit gegevensarchieven
Als u de gegevens toegankelijk wilt maken voor Azure Machine Learning, moet u gegevenssets maken op basis van paden in web-URL's of Azure Machine Learning-gegevensarchieven.
Tip
U kunt gegevenssets rechtstreeks vanuit opslag-URL's maken met op identiteit gebaseerde gegevenstoegang. Ga naar Verbinding maken met opslag met toegang tot gegevens op basis van identiteiten voor meer informatie.
Gegevenssets maken vanuit een gegevensarchief met de Python SDK:
Controleer of u de onderliggende opslagservice van uw geregistreerde Azure Machine Learning-gegevensarchief hebt of
owner
er toegang toe hebtcontributor
. Controleer de machtigingen van uw opslagaccount in Azure Portal.Maak de gegevensset door te verwijzen naar paden in het gegevensarchief. U kunt een gegevensset maken op basis van meerdere paden in meerdere gegevensarchieven. Er is geen vaste limiet voor het aantal bestanden of gegevensgrootte waaruit u een gegevensset kunt maken.
Notitie
Voor elk gegevenspad worden een paar aanvragen naar de opslagservice verzonden om te controleren of deze verwijst naar een bestand of een map. Deze overhead kan leiden tot verminderde prestaties of fouten. Een gegevensset die verwijst naar één map met 1000 bestanden in de map, wordt beschouwd als het verwijzen naar één gegevenspad. Voor optimale prestaties raden we u aan gegevenssets te maken die verwijzen naar minder dan 100 paden in gegevensarchieven.
Een FileDataset maken
Gebruik de from_files()
methode in de FileDatasetFactory
klasse om bestanden in elke indeling te laden en om een niet-geregistreerde FileDataset te maken.
Als uw opslag zich achter een virtueel netwerk of een firewall bevindt, stelt u de parameter validate=False
in de from_files()
methode in. Hiermee wordt de eerste validatiestap overgeslagen en zorgt u ervoor dat u uw gegevensset kunt maken op basis van deze beveiligde bestanden. Ga voor meer informatie naar het gebruik van gegevensarchieven en gegevenssets in een virtueel netwerk.
from azureml.core import Workspace, Datastore, Dataset
# create a FileDataset recursively pointing to files in 'animals' folder and its subfolder
datastore_paths = [(datastore, 'animals')]
animal_ds = Dataset.File.from_files(path=datastore_paths)
# create a FileDataset from image and label files behind public web urls
web_paths = ['https://azureopendatastorage.blob.core.windows.net/mnist/train-images-idx3-ubyte.gz',
'https://azureopendatastorage.blob.core.windows.net/mnist/train-labels-idx1-ubyte.gz']
mnist_ds = Dataset.File.from_files(path=web_paths)
Als u alle bestanden uit een lokale map wilt uploaden, maakt u een FileDataset in één methode met upload_directory()
. Met deze methode worden gegevens geüpload naar uw onderliggende opslag, waardoor er opslagkosten in rekening worden gebracht.
from azureml.core import Workspace, Datastore, Dataset
from azureml.data.datapath import DataPath
ws = Workspace.from_config()
datastore = Datastore.get(ws, '<name of your datastore>')
ds = Dataset.File.upload_directory(src_dir='<path to you data>',
target=DataPath(datastore, '<path on the datastore>'),
show_progress=True)
Als u gegevenssets opnieuw wilt gebruiken en delen in experimenten in uw werkruimte, moet u uw gegevensset registreren.
Een TabularDataset maken
Gebruik de from_delimited_files()
methode in de TabularDatasetFactory
klasse om bestanden te lezen in .csv- of .tsv-indeling en om een niet-geregistreerde TabularDataset te maken. Als u bestanden wilt lezen in .parquet
de indeling, gebruikt u de from_parquet_files()
methode. Als u uit meerdere bestanden leest, worden de resultaten samengevoegd in één tabelweergave.
Raadpleeg de referentiedocumentatie tabularDatasetFactory en informatie over syntaxis- en ontwerppatronen zoals ondersteuning voor meerdere regels voor informatie over ondersteunde bestandsindelingen.
Als uw opslag zich achter een virtueel netwerk of een firewall bevindt, stelt u de parameter validate=False
in uw from_delimited_files()
methode in. Hiermee wordt de eerste validatiestap overgeslagen en zorgt u ervoor dat u uw gegevensset kunt maken op basis van deze beveiligde bestanden. Ga naar gegevensarchieven en gegevenssets in een virtueel netwerk voor meer informatie over gegevensopslagresources achter een virtueel netwerk of firewall.
Met deze code worden de bestaande werkruimte en het gewenste gegevensarchief op naam opgehaald. Vervolgens worden de gegevensopslag- en bestandslocaties doorgegeven aan de parameter om een nieuwe TabularDataset met de path
naam weather_ds
:
from azureml.core import Workspace, Datastore, Dataset
datastore_name = 'your datastore name'
# get existing workspace
workspace = Workspace.from_config()
# retrieve an existing datastore in the workspace by name
datastore = Datastore.get(workspace, datastore_name)
# create a TabularDataset from 3 file paths in datastore
datastore_paths = [(datastore, 'weather/2018/11.csv'),
(datastore, 'weather/2018/12.csv'),
(datastore, 'weather/2019/*.csv')]
weather_ds = Dataset.Tabular.from_delimited_files(path=datastore_paths)
Gegevensschema instellen
Wanneer u een TabularDataset maakt, worden kolomgegevenstypen standaard automatisch afgeleid. Als de uitgestelde typen niet aan uw verwachtingen voldoen, kunt u kolomtypen opgeven met de volgende code om uw gegevensset bij te werken. De parameter infer_column_type
is alleen van toepassing op gegevenssets die zijn gemaakt op basis van bestanden met scheidingstekens. Ga voor meer informatie naar Meer informatie over ondersteunde gegevenstypen.
from azureml.core import Dataset
from azureml.data.dataset_factory import DataType
# create a TabularDataset from a delimited file behind a public web url and convert column "Survived" to boolean
web_path ='https://dprepdata.blob.core.windows.net/demo/Titanic.csv'
titanic_ds = Dataset.Tabular.from_delimited_files(path=web_path, set_column_types={'Survived': DataType.to_bool()})
# preview the first 3 rows of titanic_ds
titanic_ds.take(3).to_pandas_dataframe()
(Index) | PassengerId | Overleefd | Pclass | Naam | Geslacht | Leeftijd | SibSp | Roosteren | Ticket | Veergeld | Cabine | Begonnen |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | Onwaar | 3 | Braund, Mr Owen Harris | man | 22,0 | 1 | 0 | A/5 21171 | 7.2500 | S | |
1 | 2 | Waar | 1 | Cumings, Mrs John Bradley (Florence Briggs Th... | vrouwelijk | 38.0 | 1 | 0 | PC 17599 | 71.2833 | C85 | E |
2 | 3 | Waar | 3 | Heikkinen, Miss. Laina | vrouwelijk | 26.0 | 0 | 0 | STON/O2. 3101282 | 7.9250 | S |
Als u gegevenssets opnieuw wilt gebruiken en delen in experimenten in uw werkruimte, moet u uw gegevensset registreren.
Wrangle-gegevens
Nadat u uw gegevensset hebt gemaakt en geregistreerd , kunt u die gegevensset laden in uw notebook voor gegevens die wrangling en verkenning zijn uitgevoerd, voordat u modeltraining gaat volgen. Mogelijk hoeft u geen gegevens te wrangling of verkenning uit te voeren. In dat geval gaat u naar Trainen met gegevenssets voor het verzenden van ML-experimenten voor meer informatie over het verbruik van gegevenssets in uw trainingsscripts.
Gegevenssets filteren (preview)
De filtermogelijkheden zijn afhankelijk van het type gegevensset dat u hebt.
Belangrijk
Het filteren van gegevenssets met de filter()
preview-methode is een experimentele preview-functie en kan op elk gewenst moment worden gewijzigd.
Voor TabularDatasets kunt u kolommen behouden of verwijderen met de methoden keep_columns() en drop_columns().
Als u rijen wilt filteren op een specifieke kolomwaarde in een TabularDataset, gebruikt u de methode filter() (preview).
Deze voorbeelden retourneren een niet-geregistreerde gegevensset op basis van de opgegeven expressies:
# TabularDataset that only contains records where the age column value is greater than 15
tabular_dataset = tabular_dataset.filter(tabular_dataset['age'] > 15)
# TabularDataset that contains records where the name column value contains 'Bri' and the age column value is greater than 15
tabular_dataset = tabular_dataset.filter((tabular_dataset['name'].contains('Bri')) & (tabular_dataset['age'] > 15))
In FileDatasets komt elke rij overeen met een pad van een bestand, dus filteren op kolomwaarde helpt niet. U kunt echter rijen filteren op metagegevens, bijvoorbeeld CreationTime, Size, enzovoort. Deze voorbeelden retourneren een niet-geregistreerde gegevensset op basis van de opgegeven expressies:
# FileDataset that only contains files where Size is less than 100000
file_dataset = file_dataset.filter(file_dataset.file_metadata['Size'] < 100000)
# FileDataset that only contains files that were either created prior to Jan 1, 2020 or where
file_dataset = file_dataset.filter((file_dataset.file_metadata['CreatedTime'] < datetime(2020,1,1)) | (file_dataset.file_metadata['CanSeek'] == False))
Gelabelde gegevenssets die zijn gemaakt op basis van afbeeldingslabelprojecten zijn een speciaal geval. Deze gegevenssets zijn een type TabularDataset dat bestaat uit afbeeldingsbestanden. Voor deze gegevenssets kunt u() afbeeldingen filteren op metagegevens en label
op kolomwaarden image_details
.
# Dataset that only contains records where the label column value is dog
labeled_dataset = labeled_dataset.filter(labeled_dataset['label'] == 'dog')
# Dataset that only contains records where the label and isCrowd columns are True and where the file size is larger than 100000
labeled_dataset = labeled_dataset.filter((labeled_dataset['label']['isCrowd'] == True) & (labeled_dataset.file_metadata['Size'] > 100000))
Partitiegegevens
Als u een gegevensset wilt partitioneren, neemt u de partitions_format
parameter op wanneer u een TabularDataset of FileDataset maakt.
Wanneer u een gegevensset partitioneert, worden de partitiegegevens van elk bestandspad geëxtraheerd in kolommen op basis van de opgegeven indeling. De indeling moet beginnen vanaf de positie van de eerste partitiesleutel en doorgaan naar het einde van het bestandspad.
Op basis van het pad ../Accounts/2019/01/01/data.jsonl
, waarbij de partitie bijvoorbeeld is op afdelingsnaam en -tijd, wordt een partition_format='/{Department}/{PartitionDate:yyyy/MM/dd}/data.jsonl'
tekenreekskolom 'Afdeling' gemaakt met de waarde 'Accounts' en een datum/tijd-kolom 'PartitionDate' met de waarde 2019-01-01
.
Als uw gegevens al bestaande partities hebben en u die indeling wilt behouden, moet u de partitioned_format
parameter in uw from_files()
methode opnemen om een FileDataset te maken.
Als u een TabularDataset wilt maken die bestaande partities behoudt, neemt u de partitioned_format
parameter op in de from_parquet_files()
of de from_delimited_files()
methode.
Dit voorbeeld
- Hiermee maakt u een FileDataset op basis van gepartitioneerde bestanden
- Haalt de partitiesleutels op
- Hiermee maakt u een nieuwe, geïndexeerde FileDataset
file_dataset = Dataset.File.from_files(data_paths, partition_format = '{userid}/*.wav')
ds.register(name='speech_dataset')
# access partition_keys
indexes = file_dataset.partition_keys # ['userid']
# get all partition key value pairs should return [{'userid': 'user1'}, {'userid': 'user2'}]
partitions = file_dataset.get_partition_key_values()
partitions = file_dataset.get_partition_key_values(['userid'])
# return [{'userid': 'user1'}, {'userid': 'user2'}]
# filter API, this will only download data from user1/ folder
new_file_dataset = file_dataset.filter(ds['userid'] == 'user1').download()
U kunt ook een nieuwe partitiestructuur maken voor TabularDatasets met de methode partition_by().
dataset = Dataset.get_by_name('test') # indexed by country, state, partition_date
# call partition_by locally
new_dataset = ds.partition_by(name="repartitioned_ds", partition_keys=['country'], target=DataPath(datastore, "repartition"))
partition_keys = new_dataset.partition_keys # ['country']
Gegevens verkennen
Nadat u uw gegevens hebt gewranged, kunt u uw gegevensset registreren en deze vervolgens laden in uw notebook voor gegevensverkenning voordat u modeltraining gaat volgen.
Voor FileDatasets kunt u uw gegevensset koppelen of downloaden en de Python-bibliotheken toepassen die u normaal gesproken zou gebruiken voor gegevensverkenning. Ga voor meer informatie naar Meer informatie over koppelen versus downloaden.
# download the dataset
dataset.download(target_path='.', overwrite=False)
# mount dataset to the temp directory at `mounted_path`
import tempfile
mounted_path = tempfile.mkdtemp()
mount_context = dataset.mount(mounted_path)
mount_context.start()
Gebruik voor TabularDatasets de to_pandas_dataframe()
methode om uw gegevens in een dataframe weer te geven.
# preview the first 3 rows of titanic_ds
titanic_ds.take(3).to_pandas_dataframe()
(Index) | PassengerId | Overleefd | Pclass | Naam | Geslacht | Leeftijd | SibSp | Roosteren | Ticket | Veergeld | Cabine | Begonnen |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | Onwaar | 3 | Braund, Mr Owen Harris | man | 22,0 | 1 | 0 | A/5 21171 | 7.2500 | S | |
1 | 2 | Waar | 1 | Cumings, Mrs John Bradley (Florence Briggs Th... | vrouwelijk | 38.0 | 1 | 0 | PC 17599 | 71.2833 | C85 | E |
2 | 3 | Waar | 3 | Heikkinen, Miss. Laina | vrouwelijk | 26.0 | 0 | 0 | STON/O2. 3101282 | 7.9250 | S |
Een gegevensset maken op basis van pandas-dataframe
Als u een TabularDataset wilt maken op basis van een pandas-dataframe in het geheugen, gebruikt u de register_pandas_dataframe()
methode. Met deze methode wordt de TabularDataset geregistreerd bij de werkruimte en worden gegevens geüpload naar uw onderliggende opslag. Voor dit proces worden opslagkosten in rekening gebracht.
from azureml.core import Workspace, Datastore, Dataset
import pandas as pd
pandas_df = pd.read_csv('<path to your csv file>')
ws = Workspace.from_config()
datastore = Datastore.get(ws, '<name of your datastore>')
dataset = Dataset.Tabular.register_pandas_dataframe(pandas_df, datastore, "dataset_from_pandas_df", show_progress=True)
Tip
Maak en registreer een TabularDataset van een spark-dataframe in het geheugen of een dask-dataframe met de openbare preview-methoden en register_spark_dataframe()
register_dask_dataframe()
. Deze methoden zijn experimentele preview-functies en kunnen op elk gewenst moment worden gewijzigd.
Met deze methoden worden gegevens geüpload naar uw onderliggende opslag, waardoor er opslagkosten in rekening worden gebracht.
Gegevenssets registreren
Registreer uw gegevenssets bij een werkruimte om het aanmaakproces te voltooien. Gebruik de register()
methode om gegevenssets te registreren bij uw werkruimte, om ze met anderen te delen en opnieuw te gebruiken in experimenten in uw werkruimte:
titanic_ds = titanic_ds.register(workspace=workspace,
name='titanic_ds',
description='titanic training data')
Gegevenssets maken met Azure Resource Manager
U vindt veel sjablonen op microsoft.machinelearningservices die kunnen worden gebruikt om gegevenssets te maken.
Ga naar Een Azure Resource Manager-sjabloon gebruiken om een werkruimte voor Azure Machine Learning te maken voor meer informatie over deze sjablonen.
Trainen met gegevenssets
Gebruik uw gegevenssets in uw machine learning-experimenten voor het trainen van ML-modellen. Meer informatie over het trainen met gegevenssets.
Versiegegevenssets
U kunt een nieuwe gegevensset onder dezelfde naam registreren door een nieuwe versie te maken. Een gegevenssetversie kan een bladwijzer maken voor de status van uw gegevens om een specifieke versie van de gegevensset toe te passen voor experimenten of toekomstige reproductie. Ga naar gegevenssetversies voor meer informatie.
# create a TabularDataset from Titanic training data
web_paths = ['https://dprepdata.blob.core.windows.net/demo/Titanic.csv',
'https://dprepdata.blob.core.windows.net/demo/Titanic2.csv']
titanic_ds = Dataset.Tabular.from_delimited_files(path=web_paths)
# create a new version of titanic_ds
titanic_ds = titanic_ds.register(workspace = workspace,
name = 'titanic_ds',
description = 'new titanic training data',
create_new_version = True)
Volgende stappen
- Meer informatie over het trainen met gegevenssets
- Geautomatiseerde machine learning gebruiken om te trainen met TabularDatasets
- Zie de voorbeeldnotitieblokken voor meer voorbeelden van gegevenssettrainingen