Azure Machine Learning veri kümeleri oluşturma

Bu makalede, python SDK'sı ile Azure Machine Learning veya uzak denemeleriniz için verilere erişmek üzere veri kümeleri Azure Machine Learning öğrenirsiniz. Veri kümelerini genel veri erişimi Azure Machine Learning uygun olduğunu anlamak için Verilere güvenli erişim makalesine bakın.

Bir veri kümesi oluşturduğunuzda ilgili veri kaynağı konumuna bir başvurunun yanı sıra meta verilerinin bir kopyasını oluşturmuş olursunuz. Veriler mevcut konumda olduğu için ek depolama maliyetine neden olmaz ve veri kaynaklarınızı bütünlüğünü riske atmanıza gerek yoktur. Ayrıca veri kümeleri yavaş bir şekilde değerlendirilir ve bu da iş akışı performans hızlarında yardımcı olur. Veri veri kümelerinden, genel URL'lerden ve Azure Açık Veri Kümeleri.

Düşük kodlu bir deneyim için Azure Machine Learning studio ile veri kümeleri Azure Machine Learning oluşturun.

Veri Azure Machine Learning ile şunları sebilirsiniz:

  • Veri kümeleri tarafından başvurulan tek bir veri kopyasını depolama alanınıza saklayın.

  • Bağlantı dizeleri veya veri yolları konusunda endişelenmeden model eğitimi sırasında verilere sorunsuz bir şekilde erişin. Veri kümeleriyle eğitilenler hakkında daha fazla bilgi.

  • Verileri paylaşma ve diğer kullanıcılarla işbirliği yapma.

Önkoşullar

Veri kümeleri oluşturmak ve veri kümeleriyle çalışmak için aşağıdakilere ihtiyacınız vardır:

Not

Bazı veri kümesi sınıflarında yalnızca 64 bit Python ile uyumlu olan azureml-dataprep paketine bağımlılıklar vardır. Linux üzerinde geliştiriyorsanız, bu sınıflar .NET Core 2.1'i temel almaktadır ve yalnızca belirli dağıtımlarda de desteklemektedir. Desteklenen dağıtımlar hakkında daha fazla bilgi için Linux'ta .NET yükleme makalesinde .NET Core 2.1 sütununa bakın.

Önemli

Paket Linux dağıtımlarının eski sürümlerinde çalışıyor olabilir ancak temel desteğin dışında bir dağıtım kullanılması önerilmez. Temel desteğin dışında olan dağıtımlar, en son güncelleştirmeleri almayabilecek güvenlik açıklarına sahip olabilir. Distro'nizin ile uyumlu en son desteklenen sürümünün kullanılması önerilir.

İşlem boyutu kılavuzu

Veri kümesi oluştururken işlem gücü ve bellekte verilerinizin boyutunu gözden geçirebilirsiniz. Depolama alanı içinde verilerinizin boyutu, bir veri çerçevesinin veri boyutuyla aynı değildir. Örneğin, CSV dosyalarında yer alan veriler bir veri çerçevesi içinde 10 kat genişleyene kadar genişleyene bir veri çerçevesi içinde 1 GB CSV dosyası 10 GB olabilir.

Verileriniz sıkıştırılırsa daha fazla genişletebilirsiniz; Sıkıştırılmış parquet biçiminde depolanan 20 GB nispeten seyrek veri, bellekte yaklaşık 800 GB'a kadar genişleyemenizi sağlar. Parquet dosyaları verileri sütun biçiminde depolayana kadar, sütunların yalnızca yarısına ihtiyacınız varsa yalnızca yaklaşık 400 GB bellek yüklemesi gerekir.

içinde veri işlemeyi iyileştirme hakkında daha fazla bilgi Azure Machine Learning.

Veri kümesi türleri

Kullanıcıların eğitimde bunları nasıl tükettiğine bağlı olarak iki veri kümesi türü vardır; FileDatasets ve TabularDatasets. Her iki tür de tahmin Azure Machine Learning, AutoML, hyperDrive ve işlem hatları içeren eğitim iş akışlarında kullanılabilir.

FileDataset

FileDataset, veristore'lar veya genel URL'ler içinde tek veya birden çok dosyaya başvurur. Verileriniz zaten temizlenmişse ve eğitim denemelerinde kullanıma hazırsa, dosyaları bir FileDataset nesnesi olarak indirebilir veya işleminize indirebilirsiniz.

Kaynak dosyalar herhangi bir biçimde olabilir ve bu da derin öğrenme de dahil olmak üzere çok çeşitli makine öğrenmesi senaryolarına olanak sağlayan makine öğrenmesi iş akışlarınız için FileDatasets'i öneririz.

Python SDK veya Azure Machine Learning studio ile fileDataset oluşturun.

TabularDataset

TabularDataset, sağlanan dosyayı veya dosya listesini ayrıştırarak verileri tablo biçiminde temsil eder. Bu size, not defterinizi bırakmak zorunda kalmadan tanıdık veri hazırlama ve eğitim kitaplıkları ile çalışabilmeniz için verileri bir pandas veya Spark DataFrame'de yapma olanağı sağlar. TabularDataset.csv, .tsv, .parquet, .jsonl dosyalarındanve sorgu sonuçlarından SQL oluşturabilirsiniz.

TabularDatasets ile verilerde bir sütundan veya yol deseninin depolandığı her yerden zaman damgası belirterek zaman serisi özelliklerini etkinleştirebilirsiniz. Bu belirtim, zaman açısından kolay ve verimli filtreleme sağlar. Örnek için NOAA hava durumu verileriyle tablosal zaman serisiyle ilgili API demosna bakın.

Python SDK veya Azure Machine Learning Studio ile bir TabularDataset oluşturun.

Not

ML studio Azure Machine Learning otomatikleştirilmiş iş akışları şu anda yalnızca TabularDatasets'i destekler.

Sanal ağ içinde veri kümelerine erişme

Çalışma alanınız bir sanal ağ içinde ise, doğrulamayı atlamak için veri kümesi yapılandırmanız gerekir. Sanal ağ içinde veri deposu ve veri kümelerini kullanma hakkında daha fazla bilgi için bkz. Çalışma alanının veilişkili kaynakların güvenliğini sağlama.

Veri veri kümelerinden veri kümeleri oluşturma

Verilerin veri kümeleri tarafından erişilebilir olması Azure Machine Learning veri kümeleri, veri deposu veya web URL'Azure Machine Learning yollardan oluşturularak oluşturularak oluşturulur.

İpucu

Veri kümelerini doğrudan kimlik tabanlı veri erişimi olan depolama URL'lerinden oluşturabilirsiniz. Kimlik tabanlı veri Bağlan depolamaya giriş hakkında daha fazla bilgi edinebilirsiniz.

Python SDK'sı ile bir veri deposundan veri kümeleri oluşturmak için:

  1. Kayıtlı verilerinizin temel contributor owner alınan depolama hizmetine sahip veya bu veri deposuna Azure Machine Learning doğrulayın. depolama hesabı izinlerinizi Azure portal.

  2. Veri deposu yollara başvurarak veri kümesi oluşturun. Birden çok veri deposuna birden çok yoldan veri kümesi oluşturabilirsiniz. Veri kümesi oluşturabilirsiniz dosya veya veri boyutu üzerinde sabit bir sınır yoktur.

Not

Her veri yolu için depolama hizmetine birkaç istek gönderip bir dosyaya mı yoksa klasöre mi gönderildiğini kontrol edin. Bu ek yük performansın düşebilir veya hataya yol açabilir. İçinde 1000 dosya bulunan bir klasöre başvuran bir veri kümesi, tek bir veri yoluna başvuru olarak kabul edilir. En iyi performans için veri kümelerini 100'den az yola başvuran veri kümesi oluşturmanız önerilir.

FileDataset oluşturma

Herhangi from_files() bir biçimde dosya FileDatasetFactory yüklemek ve kayıtsız fileDataset oluşturmak için sınıfında yöntemini kullanın.

Depolama alanınız bir sanal ağın veya güvenlik duvarının arkasında ise validate=False yönteminize parametresini from_files() ayarlayın. Bu, ilk doğrulama adımını atlar ve bu güvenli dosyalardan veri kümenizi oluşturabilirsiniz. Sanal ağ içinde veri deposu ve veri kümelerini kullanma hakkında daha fazla bilgi alın.

from azureml.core import Workspace, Datastore, Dataset

# create a FileDataset pointing to files in 'animals' folder and its subfolders recursively
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)

Yerel dizinden tüm dosyaları karşıya yüklemek için, upload_directory() ile tek bir yöntemde fileDataset oluşturun. Bu yöntem, temel alınan depolama alanınıza veri yükler ve bunun sonucunda depolama maliyetlerine neden olur.

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)

Çalışma alanınıza veri kümelerini yeniden kullanmak ve denemeler arasında paylaşmak için veri kümenizi kaydedin.

TabularDataset oluşturma

.tsv biçimindeki dosyaları okumak ve .csv bir from_delimited_files() TabularDatasetFactory TabularDataset oluşturmak için sınıfındaki yöntemini kullanın. Dosyaları .parquet biçiminde okumak için yöntemini from_parquet_files() kullanın. Birden çok dosyadan okuyorsanız, sonuçlar tek bir tablo gösterimine toplanır.

Desteklenen dosya biçimleri ve çok satırlı destek gibi söz dizimi ve tasarım desenleri hakkında bilgi için TabularDatasetFactory başvuru belgelerine bakın.

Depolama alanınız bir sanal ağın veya güvenlik duvarının arkasında ise validate=False yönteminize parametresini from_delimited_files() ayarlayın. Bu, ilk doğrulama adımını atlar ve bu güvenli dosyalardan veri kümenizi oluşturabilirsiniz. Sanal ağ içinde veri deposu ve veri kümelerini kullanma hakkında daha fazla bilgi alın.

Aşağıdaki kod, mevcut çalışma alanını ve istenen veri deposu adını alır. Ardından yeni bir TabularDataset oluşturmak için veri deposu ve dosya path konumlarını parametresine weather_ds iletir.

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)

Veri şemasını ayarlama

Varsayılan olarak, bir TabularDataset oluşturma sırasında sütun veri türleri otomatik olarak görüntülenir. Ertelenen türler beklentilerinize uygunsa, sütun türlerini aşağıdaki kodla belirterek veri kümesi şemanızı güncelleştirebilirsiniz. parametresi infer_column_type yalnızca sınırlandırılmış dosyalardan oluşturulan veri kümeleri için geçerlidir. Desteklenen veri türleri hakkında daha fazla bilgi.

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()
(Dizin) PassengerId Hayatta Pclass Name Seks Yaş SibSp Parch Bilet Ücret Kabin Girişti
0 1 Yanlış 3 Lanmıştırd, Mr. Harris Harris erkek 22.0 1 0 A/5 21171 7.2500 S
1 2 Doğru 1 Cumings, Mrs. John Brad (Briggs Th... kadın 38.0 1 0 PC 17599 71.2833 C85 C
2 3 Doğru 3 Heikkinen, Miss. Laina kadın 26.0 0 0 STON/O2. 3101282 7.9250 S

Çalışma alanınız genelinde veri kümelerini yeniden kullanmak ve paylaşmak için veri kümenizi kaydedin.

Verileri düzenleme

Veri kümenizi oluşturduk ve kaydettikten sonra, model eğitimi öncesinde veri hazırlama ve araştırma için not defterinize yükleyebilirsiniz.

Veri hazırlama veya araştırma yapmaya gerek yoksa Veri kümeleriyle eğitme'de eğitim betikleri içinde veri kümelerini kullanarak veri ML denemeleri gönderme hakkında bilgi alın.

Veri kümelerini filtreleme (önizleme)

Filtreleme özellikleri sahip olduğu veri kümesi türüne bağlıdır.

Önemli

Veri kümelerini önizleme yöntemiyle filtrelemek deneysel bir önizleme filter() özelliğidir ve herhangi bir zamanda değişebilir.

TabularDatasets için, keep_columns() ve drop_columns() yöntemleriyle sütunları tutabilirsiniz veya kaldırabilirsiniz.

Bir TabularDataset'te satırları belirli bir sütun değerine göre filtrelemek için filter() yöntemini (önizleme) kullanın.

Aşağıdaki örnekler, belirtilen ifadeleri temel alan kayıtsız bir veri kümesi geri döner.

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

FileDatasets içinde her satır bir dosyanın yoluna karşılık gelen bir değerdir, bu nedenle sütun değerine göre filtreleme yararlı olmaz. Ancak satırları CreationTime, Size gibi meta verilere göre filtrelebilirsiniz.

Aşağıdaki örnekler, belirtilen ifadeleri temel alan kayıtsız bir veri kümesi geri döner.

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

Görüntü etiketleme projelerinden oluşturulan etiketlenmiş veri kümeleri özel bir durumdur. Bu veri kümeleri, görüntü dosyalardan oluşturulan bir TabularDataset tuşuna basın. Bu veri kümesi türleri için() görüntülerini meta verilere ve ve gibi sütun değerlerine göre label filtreleyebilirsiniz. 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))

Verileri bölümleme

partitions_formatTabularDataset veya FileDataset oluştururken parametresini dahilerek veri kümelerini bölümleyebilirsiniz.

Bir veri kümesi bölümleme, her dosya yolunun bölüm bilgileri belirtilen biçime göre sütunlara ayıklanır. Biçimin ilk bölüm anahtarının konumundan dosya yolunun sonuna kadar başlaması gerekir.

Örneğin, bölümün bölüm adına ve saat değerine göre olduğu bir yol verildi; değeri 'Accounts' olan bir 'Department' dize sütunu ve ../Accounts/2019/01/01/data.jsonl partition_format='/{Department}/{PartitionDate:yyyy/MM/dd}/data.jsonl' 'PartitionDate' değerine sahip bir tarih saat sütunu 2019-01-01 oluşturur.

Verilerinizde zaten bölümler varsa ve bu biçimi korumak için partitioned_format from_files() fileDataset oluşturmak için yönteminize parametresini dahil etmek gerekir.

Mevcut bölümleri koruyan bir TabularDataset oluşturmak için parametresini from_parquet_files() veya partitioned_format from_delimited_files() yöntemine ekleyin.

Aşağıdaki örnek,

  • Bölümlenmiş dosyalardan bir FileDataset oluşturur.
  • Bölüm anahtarlarını alır
  • kullanarak yeni, dizine oluşturulan bir FileDataset oluşturur

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

Ayrıca, partitions_by() yöntemiyle TabularDatasets için yeni bir bölüm yapısı oluşturabilirsiniz.


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

Verileri inceleme

Verilerinizi hazırladikten sonra, model eğitimi öncesinde veri kümenizi kaydedebilirsiniz ve ardından veri keşfi için not defterinize yükleyebilirsiniz.

FileDatasets için veri kümenizi bağlar veya indirebilir ve normalde veri keşfi için kullanabileceğiniz Python kitaplıklarını uygulayabilirsiniz. Bağlama ve indirme hakkında daha fazla bilgi edinin.

# 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 için yöntemini to_pandas_dataframe() kullanarak verilerinizi bir veri çerçevesi içinde görüntüleyin.

# preview the first 3 rows of titanic_ds
titanic_ds.take(3).to_pandas_dataframe()
(Dizin) PassengerId Hayatta Pclass Name Seks Yaş SibSp Parch Bilet Ücret Kabin Girişti
0 1 Yanlış 3 Lanmıştırd, Mr. Harris Harris erkek 22.0 1 0 A/5 21171 7,2500 S
1 2 Doğru 1 Hanler, Mrs. John Bradley (çiçek)... kadın 38,0 1 0 BILGISAYAR 17599 71,2833 C85 C
2 3 Doğru 3 Heıkkinen, Isabetsizlik. Laina kadın 26.0 0 0 STON/O2. 3101282 7,9250 S

Pandas dataframe 'ten bir veri kümesi oluşturma

Bellek Pandas dataframe 'ten bir TabularDataset oluşturmak için register_pandas_dataframe() yöntemini kullanın. Bu yöntem, TabularDataset 'i çalışma alanına kaydeder ve depolama maliyetleri olan temel depolama alanınıza veri yükler.

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)

İpucu

Bir TabularDataset ' i bir bellek Spark dataframe 'ten ya da genel önizleme yöntemleriyle bir DASK dataframe 'ten oluşturun ve kaydedin register_spark_dataframe() register_dask_dataframe() . Bu yöntemler deneysel önizleme özellikleridir ve herhangi bir zamanda değişebilir.

Bu yöntemler, verileri temel depolama verilerinize yükler ve sonuç olarak depolama maliyetlerine uygulanır.

Veri kümelerini Kaydet

Oluşturma işlemini gerçekleştirmek için, veri kümelerinizi bir çalışma alanına kaydedin. Çalışma alanınızda register() başkalarıyla paylaşmak ve çalışma alanınızdaki denemeleri genelinde yeniden kullanmak için veri kümelerini çalışma alanınıza kaydetmek üzere yöntemini kullanın:

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

Azure Resource Manager kullanarak veri kümeleri oluşturma

Üzerinde https://github.com/Azure/azure-quickstart-templates/tree/master//quickstarts/microsoft.machinelearningservices veri kümeleri oluşturmak için kullanılabilecek birçok şablon vardır.

Bu şablonları kullanma hakkında daha fazla bilgi için bkz. Azure Machine Learning için bir çalışma alanı oluşturmak üzere Azure Resource Manager şablonu kullanma.

Veri kümeleriyle eğitme

eğitim ML modellerinizde, machine learning denemeleri veri kümelerinizi kullanın. Veri kümeleriyle eğitme hakkında daha fazla bilgi edinin.

Sürüm veri kümeleri

Yeni bir sürüm oluşturarak aynı ada sahip yeni bir veri kümesini kaydedebilirsiniz. Veri kümesi sürümü, deneme veya gelecekteki bir çoğaltma için veri kümesinin belirli bir sürümünü uygulayabilmeniz için verilerinizin durumuna yer işaretinin bir yoludur. Veri kümesi sürümlerihakkında daha fazla bilgi edinin.

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

Sonraki adımlar