Megosztás a következőn keresztül:


Azure Machine Learning-adathalmazok létrehozása

A KÖVETKEZŐKRE VONATKOZIK: Python SDK azureml v1

Ebből a cikkből megtudhatja, hogyan hozhat létre Azure Machine Learning-adatkészleteket az Azure Machine Learning Python SDK-val végzett helyi vagy távoli kísérletek adatainak eléréséhez. Az adathalmazok az Azure Machine Learning általános adatelérési munkafolyamatában való illeszkedéséről a Biztonságosan hozzáférés adatcikkben talál további információt.

Amikor létrehoz egy adathalmazt, az adatforrás helyére mutató hivatkozást és annak metaadatainak másolatát hozza létre. Mivel az adatok a meglévő helyen maradnak, nincs többlet tárolási költség, és nem kockáztatja az adatforrások integritását. Emellett az adathalmazok lazán kiértékelésre kerülnek, ami segít a munkafolyamatok teljesítményének javítására. Adatkészleteket adattárakból, nyilvános URL-címekből és Azure Open Datasetekből hozhat létre. Az alacsony kódszámú felülettel kapcsolatos információkért látogasson el az Azure Machine Learning-adathalmazok létrehozása az Azure Machine Learning Studióval.

Az Azure Machine Learning-adatkészletekkel a következőket teheti:

  • Az adathalmazok által hivatkozott adatok egyetlen másolatának tárolása a tárban

  • Zökkenőmentesen elérheti az adatokat a modell betanítása során anélkül, hogy a kapcsolati sztring vagy az adatútvonalak miatt kellene aggódnia. Az adathalmazok betanításával kapcsolatos további információkért tekintse meg az adathalmazok betanításával kapcsolatos további tudnivalókat

  • Adatok megosztása és együttműködés más felhasználókkal

Fontos

A cikkben "előzetes verzióként" megjelölt elemek jelenleg nyilvános előzetes verzióban érhetők el. Az előzetes verzió szolgáltatásszint-szerződés nélkül érhető el, és éles számítási feladatokhoz nem ajánlott. Előfordulhat, hogy néhány funkció nem támogatott, vagy korlátozott képességekkel rendelkezik. További információ: Kiegészítő használati feltételek a Microsoft Azure előzetes verziójú termékeihez.

Előfeltételek

Az adathalmazok létrehozásához és használatához a következőkre van szükség:

Feljegyzés

Egyes adathalmazosztályok függőségekkel rendelkeznek az azureml-dataprep csomaghoz, amely csak a 64 bites Pythonnal kompatibilis. Ha Linuxon fejleszt, ezek az osztályok a .NET Core 2.1-en alapulnak, és csak bizonyos disztribúciók támogatják őket. A támogatott disztribúciókkal kapcsolatos további információkért olvassa el a .NET Core 2.1 oszlopot a .NET telepítése Linuxon című cikkben.

Fontos

Bár a csomag a Linux disztribúciók régebbi verzióin is működik, nem javasoljuk, hogy olyan disztribúciót használjon, amely nincs általános támogatásban. Az általános támogatáson kívüli disztribúciók biztonsági résekkel rendelkezhetnek, mivel nem kapják meg a legújabb frissítéseket. Javasoljuk, hogy a disztribúció legújabb támogatott verzióját használja, amely kompatibilis a következővel: .

Számítási méretre vonatkozó útmutató

Adathalmaz létrehozásakor tekintse át a számítási feldolgozási teljesítményt és az adatok méretét a memóriában. A tárolóban lévő adatok mérete nem azonos az adatkeretben lévő adatok méretével. A CSV-fájlok adatai például akár 10-szer is kibővülhetnek egy adatkeretben, így egy 1 GB-os CSV-fájl 10 GB-ra nőhet egy adatkeretben.

A tömörített adatok tovább bővülhetnek. A tömörített parkettaformátumban tárolt húsz GB viszonylag ritka adat ~800 GB memóriára bővülhet. Mivel a Parquet-fájlok oszlopos formátumban tárolják az adatokat, ha csak az oszlopok felét szeretné, akkor csak ~400 GB memóriát kell betöltenie.

További információkért tekintse meg az Azure Machine Learning adatfeldolgozásának optimalizálásával kapcsolatos további tudnivalókat.

Adathalmaz-típusok

Két adathalmaztípus létezik, amelyek alapján a felhasználók hogyan használnak adathalmazokat a betanítás során: FileDatasets és TabularDatasets. Az Azure Machine Learning betanítási munkafolyamatai, amelyekbe becslők, AutoML, hyperDrive és folyamatok tartoznak, mindkét típust használhatják.

FileDataset

A FileDataset egy vagy több fájlra hivatkozik az adattárakban vagy a nyilvános URL-címeken. Ha az adatokat már megtisztították, és készen állnak a betanítási kísérletekben való használatra, letöltheti vagy csatlakoztathatja a fájlokat a számításhoz FileDataset-objektumként.

A gépi tanulási munkafolyamatokhoz javasoljuk a FileDatasets használatát, mert a forrásfájlok bármilyen formátumban lehetnek. Ez a gépi tanulási forgatókönyvek szélesebb körét teszi lehetővé, beleértve a mély tanulást is.

Hozzon létre egy FileDatasetet a Python SDK-val vagy az Azure Machine Learning Studióval.

TabularDataset

A TabularDataset a megadott fájlt vagy fájllistát elemzi, hogy táblázatos formátumban ábrázolja az adatokat. Ezt követően a pandas vagy a Spark DataFrame használatával már jól ismert adatelőkészítési és betanítási kódtárakkal dolgozhat, miközben a jegyzetfüzetben marad. Objektumot TabularDataset .csv, .tsv, .parquet, .json sorfájlokból és SQL-lekérdezési eredményekből hozhat létre.

A TabularDatasets használatával időbélyeget adhat meg az adatok egy oszlopából vagy az elérésiút-minta adatainak tárolásának helyéről, hogy lehetővé tegye az idősorozat-tulajdonságokat. Ez a specifikáció lehetővé teszi az egyszerű és hatékony szűrést idő szerint. Például látogasson el a Tabular time series-hez kapcsolódó API-bemutatóra NOAA időjárási adatokkal.

TabularDataset létrehozása a Python SDK-val vagy az Azure Machine Learning Studióval.

Feljegyzés

Az Azure Machine Learning Studióban létrehozott automatizált gépi tanulási munkafolyamatok jelenleg csak a TabularDatasetseteket támogatják.

Emellett az SQL-lekérdezés eredményeiből létrehozott TabularDatasets függvények esetében a T-SQL (pl. "WITH" al lekérdezés) vagy az ismétlődő oszlopnevek nem támogatottak. Az összetett T-SQL-lekérdezések teljesítményproblémákat okozhatnak. Az adathalmaz ismétlődő oszlopnevei kétértelműségi problémákat okozhatnak.

Adathalmazok elérése virtuális hálózaton

Ha a munkaterület egy virtuális hálózaton található, úgy kell konfigurálnia az adathalmazt, hogy kihagyja az érvényesítést. Az adattárak és adathalmazok virtuális hálózatokban való használatával kapcsolatos további információkért látogasson el a Munkaterület és a kapcsolódó erőforrások biztonságossá tételéhez.

Adatkészletek létrehozása adattárakból

Ahhoz, hogy az adatok elérhetők legyenek az Azure Machine Learningben, webes URL-címek vagy Azure Machine Learning-adattárak elérési útjaiból kell adatkészleteket létrehoznia.

Tipp.

Az adatkészleteket közvetlenül a tárolási URL-címekről hozhatja létre identitásalapú adathozzáféréssel. További információ: Connect to Storage with identity-based data access.

Adathalmazok létrehozása egy adattárból a Python SDK-val:

  1. Ellenőrizze, hogy rendelkezik-e vagy owner hozzáféréssel rendelkezik-e contributor a regisztrált Azure Machine Learning-adattár mögöttes tárolási szolgáltatásához. Ellenőrizze a tárfiók engedélyeit az Azure Portalon.

  2. Hozza létre az adathalmazt az adattár elérési útjaira való hivatkozással. Több adattárban több elérési útból is létrehozhat adathalmazt. Nincs korlátozva a fájlok vagy adatméretek száma, amelyekből adatkészletet hozhat létre.

Feljegyzés

Minden adatelérési út esetében a rendszer néhány kérést küld a tárolási szolgáltatásnak annak ellenőrzéséhez, hogy az egy fájlra vagy mappára mutat-e. Ez a többletterhelés teljesítménycsökkenéshez vagy meghibásodáshoz vezethet. Egy 1000 fájllal rendelkező mappára hivatkozó adathalmaz egy adatútvonalra hivatkozik. Az optimális teljesítmény érdekében javasoljuk, hogy olyan adathalmazokat hozzon létre, amelyek 100-nál kevesebb elérési útra hivatkoznak az adattárakban.

FileDataset létrehozása

Az osztály metódusával from_files() FileDatasetFactory bármilyen formátumban betölthet fájlokat, és létrehozhat egy nem regisztrált FileDatasetet.

Ha a tároló virtuális hálózat vagy tűzfal mögött található, adja meg a paramétert validate=False a from_files() metódusban. Ez megfelel a kezdeti érvényesítési lépésnek, és biztosítja, hogy ezekből a biztonságos fájlokból hozza létre az adathalmazt. További információkért látogasson el a virtuális hálózatban található adattárak és adatkészletek használatára.

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)

Ha az összes fájlt egy helyi könyvtárból szeretné feltölteni, hozzon létre egy FileDatasetet egyetlen metódussal a következővel upload_directory(): . Ez a módszer feltölti az adatokat a mögöttes tárolóba, és emiatt tárolási költségek merülnek fel.

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)

Ha újra szeretné használni és megosztani az adathalmazokat a munkaterületen lévő kísérletek között, regisztrálja az adathalmazt.

TabularDataset létrehozása

Az osztály metódusával from_delimited_files() TabularDatasetFactory .csv vagy .tsv formátumban olvashat fájlokat, és létrehozhat egy nem regisztrált TabularDatasetet. Ha formátumból .parquet szeretne fájlokat olvasni, használja a metódust from_parquet_files() . Ha több fájlból olvas, az eredmények egyetlen táblázatos ábrázolásba lesznek összesítve.

A támogatott fájlformátumokkal kapcsolatos információkért tekintse meg a TabularDatasetFactory referenciadokumentációját, valamint a szintaxissal és a tervezési mintákkal, például a többsoros támogatással kapcsolatos információkat.

Ha a tároló virtuális hálózat vagy tűzfal mögött található, adja meg a paramétert validate=False a from_delimited_files() metódusban. Ez megfelel a kezdeti érvényesítési lépésnek, és biztosítja, hogy ezekből a biztonságos fájlokból hozza létre az adathalmazt. A virtuális hálózat vagy tűzfal mögötti adattárolási erőforrásokról további információt a virtuális hálózaton található adattárakban és adatkészletekben talál.

Ez a kód név alapján lekéri a meglévő munkaterületet és a kívánt adattárat. Ezután átadja az adattárat és a fájlhelyeket a path paraméternek, hogy létrehozhasson egy új TabularDataset nevűt 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)

Adatséma beállítása

TabularDataset létrehozásakor az oszlop adattípusai alapértelmezés szerint automatikusan következtetnek. Ha a kikövetkeztetett típusok nem felelnek meg az elvárásainak, az adatkészlet frissítéséhez az alábbi kóddal megadhatja az oszloptípusokat. A paraméter infer_column_type csak a tagolt fájlokból létrehozott adathalmazokra vonatkozik. További információ: További információ a támogatott adattípusokról.

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) Utasazonosító Túlélte Pclass Név Nem Kor SibSp Aszal Jegy Boldogul Utastér Behajózva
0 0 Hamis 3 Braund, Mr. Owen Harris male 22,0 0 0 A/5 21171 7.2500 V
0 2 Igaz 0 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 0 0 PC 17599 71.2833 C85 C
2 3 Igaz 3 Heikkinen, Miss. Laina female 26,0 0 0 STON/O2. 3101282 7.9250 V

Ha újra szeretné használni és megosztani az adathalmazokat a munkaterületen lévő kísérletek között, regisztrálja az adathalmazt.

Adatok átfésülése

Miután létrehozta és regisztrálta az adathalmazt, a modell betanítása előtt betöltheti az adathalmazt a jegyzetfüzetbe adatkonvergálás és -feltárás céljából. Előfordulhat, hogy nem kell adattovábbítást vagy -feltárást végeznie. Ebben az esetben az ml-kísérletek beküldéséhez használt betanítási szkriptekben lévő adathalmazok felhasználásával kapcsolatos további információkért látogasson el a Betanítás adathalmazokkal című témakörbe.

Adathalmazok szűrése (előzetes verzió)

A szűrési képességek az adathalmaz típusától függenek.

Fontos

Az adathalmazok előzetes verziós módszerrel történő filter() szűrése kísérleti előzetes verziójú funkció, amely bármikor változhat.

TabularDatasets esetén a keep_columns() és drop_columns() metódusokkal megtarthatja vagy eltávolíthatja az oszlopokat.

Ha egy TabularDataset adott oszlopértéke alapján szeretné kiszűrni a sorokat, használja a filter() metódust (előzetes verzió).

Ezek a példák egy nem regisztrált adatkészletet ad vissza a megadott kifejezések alapján:

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

A FileDatasetsben minden sor egy fájl elérési útjának felel meg, ezért az oszlopérték szerinti szűrés nem segít. A sorokat azonban metaadatok alapján is szűrheti ( például CreationTime, Size stb. Ezek a példák egy nem regisztrált adatkészletet ad vissza a megadott kifejezések alapján:

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

A képfeliratozási projektekből létrehozott címkézett adathalmazok különleges esetnek számítanak. Ezek az adathalmazok képfájlokból álló TabularDataset típusúak. Ezekhez az adathalmazokhoz metaadatok image_details label, valamint oszlopértékek alapján szűrheti a képeket.

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

Partícióadatok

Adathalmaz particionálásához adja meg a partitions_format paramétert a TabularDataset vagy a FileDataset létrehozásakor.

Adathalmaz particionálásakor az egyes fájlelérési utak partícióadatai a megadott formátum alapján oszlopokba lesznek kinyerve. A formátumnak az első partíciókulcs helyétől kell kezdődnie, és a fájl elérési útjának végéig kell folytatódnia.

Ha például az elérési út ../Accounts/2019/01/01/data.jsonlalapján a partíció részlegnév és idő szerint van megadva, a partition_format='/{Department}/{PartitionDate:yyyy/MM/dd}/data.jsonl' rendszer létrehoz egy "Részleg" sztringoszlopot a "Fiókok" értékkel, és egy "PartitionDate" datetime oszlopot az értékkel 2019-01-01.

Ha az adatok már tartalmaznak meglévő partíciókat, és meg szeretné őrizni ezt a formátumot, adja meg a paramétert a partitioned_format from_files() metódusban egy FileDataset létrehozásához.

A meglévő partíciókat megőrző TabularDataset létrehozásához adja meg a partitioned_format paramétert a metódusban vagy a from_parquet_files() from_delimited_files() metódusban.

Ez a példa

  • FileDataset létrehozása particionált fájlokból
  • A partíciókulcsok lekérdezése
  • Új, indexelt FileDataset létrehozása

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

A TabularDatasets új partícióstruktúráját is létrehozhatja a partition_by() metódussal.


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

Adatok megismerése

Az adatok átrendezése után regisztrálhatja az adathalmazt, majd betöltheti őket a jegyzetfüzetbe adatfeltáráshoz a modell betanítása előtt.

FileDatasets esetén csatlakoztathatja vagy letöltheti az adathalmazt, és alkalmazhatja az adatfeltáráshoz általában használt Python-kódtárakat. További információ: További információ a csatlakoztatásról és a letöltésről.

# 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()

TabularDatasets esetén használja a to_pandas_dataframe() metódust az adatok adatkeretben való megtekintésére.

# preview the first 3 rows of titanic_ds
titanic_ds.take(3).to_pandas_dataframe()
(Index) Utasazonosító Túlélte Pclass Név Nem Kor SibSp Aszal Jegy Boldogul Utastér Behajózva
0 0 Hamis 3 Braund, Mr. Owen Harris male 22,0 0 0 A/5 21171 7.2500 V
0 2 Igaz 0 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 0 0 PC 17599 71.2833 C85 C
2 3 Igaz 3 Heikkinen, Miss. Laina female 26,0 0 0 STON/O2. 3101282 7.9250 V

Adatkészlet létrehozása pandas-adatkeretből

TabularDataset memóriabeli pandas-adatkeretből való létrehozásához használja a metódust register_pandas_dataframe() . Ez a módszer regisztrálja a TabularDatasetet a munkaterületen, és feltölti az adatokat a mögöttes tárolóba. Ez a folyamat tárolási költségeket von maga után.

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)

Tipp.

Hozzon létre és regisztráljon egy TabularDatasetet egy memóriabeli Spark-adatkeretből vagy egy dask-adatkeretből a nyilvános előzetes verziós metódusokkal, register_spark_dataframe() és register_dask_dataframe(). Ezek a módszerek kísérleti előzetes verziójú funkciók, és bármikor változhatnak.

Ezek a módszerek adatokat töltenek fel a mögöttes tárolóba, és emiatt tárolási költségekkel járnak.

Adathalmazok regisztrálása

A létrehozási folyamat befejezéséhez regisztrálja az adathalmazokat egy munkaterületen. Ezzel a register() módszerrel regisztrálhatja az adathalmazokat a munkaterületén, megoszthatja őket másokkal, és újra felhasználhatja őket a munkaterületen végzett kísérletek során:

titanic_ds = titanic_ds.register(workspace=workspace,
                                 name='titanic_ds',
                                 description='titanic training data')

Adatkészletek létrehozása az Azure Resource Managerrel

A microsoft.machinelearningservices webhelyen számos olyan sablon található, amelyek adathalmazok létrehozásához használhatók.

Ezekről a sablonokról az Azure Resource Manager-sablon használatával hozhat létre munkaterületet az Azure Machine Learninghez.

Betanítás adathalmazok használatával

Az adathalmazokat gépi tanulási kísérletekben használhatja az ML-modellek betanításához. További információ az adathalmazok betanításairól.

Verzióadatkészletek

Új verzió létrehozásával új adathalmazt regisztrálhat ugyanazzal a névvel. Az adathalmazok verziója könyvjelzővel láthatja el az adatok állapotát, így az adathalmaz egy adott verzióját alkalmazhatja kísérletezésre vagy későbbi többszörözésre. További információkért látogasson el az adathalmaz verzióira.

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

Következő lépések