Share via


Azure Machine Learning veri kümeleri oluşturma

ŞUNUN IÇIN GEÇERLIDIR:Python SDK azureml v1

Bu makalede, Azure Machine Learning Python SDK'sı ile yerel veya uzak denemelerinizin verilerine erişmek için Azure Machine Learning veri kümeleri oluşturmayı öğreneceksiniz. Veri kümelerinin Azure Machine Learning'in genel veri erişimi iş akışına nasıl sığacakları hakkında daha fazla bilgi için Verilere güvenli erişim makalesini ziyaret edin.

Veri kümesi oluşturduğunuzda, veri kaynağı konumuna ve meta verilerinin bir kopyasına yönelik bir başvuru oluşturursunuz. Veriler mevcut konumunda kaldığından, ek depolama maliyetine neden olmazsınız ve veri kaynaklarınızın bütünlüğünü riske atmazsınız. Ayrıca veri kümeleri, iş akışı performans hızlarını artırmaya yardımcı olacak şekilde gevşek bir şekilde değerlendirilir. Veri depolarından, genel URL'lerden ve Azure Açık Veri Kümelerinden veri kümeleri oluşturabilirsiniz. Düşük kod deneyimi hakkında bilgi için Azure Machine Learning stüdyosu ile Azure Machine Learning veri kümeleri oluşturma bölümünü ziyaret edin.

Azure Machine Learning veri kümeleriyle şunları yapabilirsiniz:

  • Veri kümeleri tarafından başvuruda bulunan tek bir veri kopyasını depolama alanınızda tutma

  • Bağlantı dizesi veya veri yolları konusunda endişelenmeden model eğitimi sırasında verilere sorunsuz bir şekilde erişin. Veri kümesi eğitimi hakkında daha fazla bilgi için veri kümeleri ile eğitim hakkında daha fazla bilgi edinin bölümünü ziyaret edin

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

Önemli

Bu makaledeki "önizleme" olarak işaretlenmiş öğeler şu anda genel önizleme aşamasındadır. Önizleme sürümü bir hizmet düzeyi sözleşmesi olmadan sağlanır ve üretim iş yükleri için önerilmez. Bazı özellikler desteklenmiyor olabileceği gibi özellikleri sınırlandırılmış da olabilir. Daha fazla bilgi için bkz. Microsoft Azure Önizlemeleri Ek Kullanım Koşulları.

Önkoşullar

Veri kümeleri oluşturmak ve veri kümeleriyle çalışmak için şunları yapmanız gerekir:

Not

Bazı veri kümesi sınıflarının yalnızca 64 bit Python ile uyumlu olan azureml-dataprep paketine bağımlılıkları vardır. Linux üzerinde geliştirme yaparsanız, bu sınıflar .NET Core 2.1'i temel alır ve bunları yalnızca belirli dağıtımlar destekler. Desteklenen dağıtımlar hakkında daha fazla bilgi için Linux'ta .NET yükleme makalesindeki .NET Core 2.1 sütununu okuyun.

Önemli

Paket, Linux dağıtımlarının eski sürümlerinde çalışabilir ancak temel desteğin dışında bir dağıtımın kullanılmasını önermeyiz. Temel desteğin dışında olan dağıtımlar, en son güncelleştirmeleri almadıkları için güvenlik açıklarına sahip olabilir. Dağıtımınızın ile uyumlu en son desteklenen sürümünü kullanmanızı öneririz.

İşlem boyutu kılavuzu

Bir veri kümesi oluşturduğunuzda işlem işlem gücünüzü ve bellekteki verilerinizin boyutunu gözden geçirin. Depolamadaki verilerinizin boyutu, bir veri çerçevesi içindeki verilerin boyutuyla aynı değildir. Örneğin, CSV dosyalarındaki veriler bir veri çerçevesinde 10 kata kadar genişleyebilir, bu nedenle 1 GB CSV dosyası bir veri karesinde 10 GB olabilir.

Sıkıştırılmış veriler daha da genişleyebilir. Sıkıştırılmış parke biçiminde depolanan görece seyrek 20 GB veri bellekte yaklaşık 800 GB'a kadar genişleyebilir. Parquet dosyaları verileri sütun biçiminde depoladığından, sütunların yalnızca yarısına ihtiyacınız varsa, belleğe yalnızca ~400 GB yüklemeniz gerekir.

Daha fazla bilgi için Bkz . Azure Machine Learning'de veri işlemeyi iyileştirme hakkında daha fazla bilgi edinin.

Veri kümesi türleri

Kullanıcıların eğitimde veri kümelerini nasıl tükettiğine bağlı olarak iki veri kümesi türü vardır: FileDatasets ve TabularDatasets. Tahmin araçları, AutoML, hyperDrive ve işlem hatlarını içeren Azure Machine Learning eğitim iş akışları her iki türü de kullanabilir.

FileDataset

FileDataset, veri depolarınızdaki veya genel URL'lerinizdeki tek veya birden çok dosyaya başvurur. Verileriniz zaten temizlenmişse ve eğitim denemelerinde kullanılmaya hazırsa dosyaları fileDataset nesnesi olarak indirebilir veya işleminize bağlayabilirsiniz .

Kaynak dosyalar herhangi bir biçimde olabileceğinden, makine öğrenmesi iş akışlarınız için FileDatasets'i öneririz. Bu, derin öğrenme de dahil olmak üzere daha geniş bir makine öğrenmesi senaryosu yelpazesine olanak tanır.

Python SDK'sı veya Azure Machine Learning stüdyosu ile bir FileDataset oluşturun.

TabularDataset

TabularDataset, verileri tablo biçiminde göstermek için sağlanan dosya veya dosya listesini ayrıştırıyor. Ardından, not defterinizde kalırken tanıdık veri hazırlama ve eğitim kitaplıklarıyla çalışmak için verileri pandas veya Spark DataFrame'de gerçekleştirebilirsiniz. .csv, .tsv, .parquet, .json satır dosyalarından ve SQL sorgu sonuçlarından bir TabularDataset nesne oluşturabilirsiniz.

TabularDatasets ile verilerdeki bir sütundan veya yol deseni verilerinin depolandığı konumdan zaman damgası belirterek zaman serisi özelliğini etkinleştirebilirsiniz. Bu belirtim, zamana göre kolay ve verimli filtreleme sağlar. Örneğin, NOAA hava durumu verileriyle tablo zaman serisiyle ilgili API tanıtımı makalesini ziyaret edin.

Python SDK veya Azure Machine Learning stüdyosu ile bir TabularDataset oluşturun.

Not

Azure Machine Learning stüdyosu aracılığıyla oluşturulan otomatik ML iş akışları şu anda yalnızca TabularDatasets'i desteklemektedir.

Ayrıca, SQL sorgu sonuçlarından oluşturulan TabularDataset'ler için T-SQL (örneğin, 'WITH' alt sorgusu) veya yinelenen sütun adları desteklenmez. Karmaşık T-SQL sorguları performans sorunlarına neden olabilir. Bir veri kümesindeki yinelenen sütun adları belirsizlik sorunlarına neden olabilir.

Sanal ağdaki veri kümelerine erişme

Çalışma alanınız bir sanal ağda bulunuyorsa, doğrulamayı atlamak için veri kümesini yapılandırmanız gerekir. Sanal ağda veri depolarını ve veri kümelerini kullanma hakkında daha fazla bilgi için Çalışma alanının ve ilişkili kaynakların güvenliğini sağlama bölümünü ziyaret edin.

Veri depolarından veri kümeleri oluşturma

Verilerin Azure Machine Learning tarafından erişilebilir olmasını sağlamak için web URL'lerindeki veya Azure Machine Learning veri depolarındaki yollardan veri kümeleri oluşturmanız gerekir.

İpucu

Kimlik tabanlı veri erişimiyle doğrudan depolama URL'lerinden veri kümeleri oluşturabilirsiniz. Daha fazla bilgi için kimlik tabanlı veri erişimiyle depolamaya Bağlan adresini ziyaret edin.

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

  1. Kayıtlı Azure Machine Learning veri deponuzun temel depolama hizmetine sahip contributor olduğunuzu veya owner bu hizmete erişebildiğinizden emin olun. Azure portalında depolama hesabı izinlerinizi denetleyin.

  2. Veri deposundaki yollara başvurarak veri kümesini oluşturun. Birden çok veri deposundaki birden çok yoldan veri kümesi oluşturabilirsiniz. Veri kümesi oluşturabileceğiniz dosya sayısı veya veri boyutu üzerinde sabit bir sınır yoktur.

Not

Her veri yolu için, depolama hizmetine bir dosyaya veya klasöre işaret edip etmediğini denetlemek için birkaç istek gönderilir. Bu ek yük performansın düşmesine veya hataya neden olabilir. İçinde 1000 dosya bulunan bir klasöre başvuran bir veri kümesi, bir veri yoluna başvuru olarak kabul edilir. En iyi performans için veri depolarında 100'den az yola başvuran veri kümeleri oluşturmanızı öneririz.

FileDataset Oluşturma

from_files() Herhangi bir biçimde dosyaları yüklemek ve kaydedilmemiş bir FileDataset oluşturmak için sınıfındaki FileDatasetFactory yöntemini kullanın.

Depolama alanınız bir sanal ağın veya güvenlik duvarının arkasındaysa yönteminde parametresini validate=Falsefrom_files() ayarlayın. Bu, ilk doğrulama adımını atlar ve bu güvenli dosyalardan veri kümenizi oluşturabilmenizi sağlar. Daha fazla bilgi için sanal ağdaki veri depolarını ve veri kümelerini kullanma bölümünü ziyaret edin.

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)

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

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ızdaki denemelerde veri kümelerini yeniden kullanmak ve paylaşmak için veri kümenizi kaydedin.

TabularDataset oluşturma

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

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

Depolama alanınız bir sanal ağın veya güvenlik duvarının arkasındaysa, yönteminizde from_delimited_files() parametresini validate=False ayarlayın. Bu, ilk doğrulama adımını atlar ve bu güvenli dosyalardan veri kümenizi oluşturabilmenizi sağlar. Sanal ağın veya güvenlik duvarının arkasındaki veri depolama kaynakları hakkında daha fazla bilgi için sanal ağdaki veri depolarını ve veri kümelerini ziyaret edin.

Bu kod mevcut çalışma alanını ve istenen veri depolarını ada göre alır. Ardından veri depolarını ve dosya konumlarını parametresine path geçirerek adlı weather_dsyeni bir TabularDataset oluşturur:

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

TabularDataset oluşturduğunuzda, sütun veri türleri varsayılan olarak otomatik olarak çıkarılır. Çıkarsanan türler beklentilerinize uymuyorsa, veri kümenizi güncelleştirmek için aşağıdaki kodla sütun türlerini belirtebilirsiniz. parametresi infer_column_type yalnızca sınırlandırılmış dosyalardan oluşturulan veri kümeleri için geçerlidir. Daha fazla bilgi için desteklenen veri türleri hakkında daha fazla bilgi edinin'i ziyaret edin.

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 Veri Akışı Adı Cinsiyet Yaş SibSp Parch Bilet Ücret Kabin Girişti
0 1 False 3 Braund, Bay Owen Harris erkek 22.0 1 0 A/5 21171 7.2500 S
1 2 True 1 Cumings, Bayan John Bradley (Florence Briggs Th... kadın 38.0 1 0 PC 17599 71.2833 C85 C
2 3 True 3 Heikkinen, bayan. Laina kadın 26.0 0 0 STON/O2. 3101282 7.9250 S

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

Verileri düzenleme

Veri kümenizi oluşturup kaydettikten sonra, model eğitimi öncesinde veri hazırlama ve araştırma için bu veri kümesini not defterinize yükleyebilirsiniz. Veri hazırlama veya araştırma yapmanız gerekmeyebilir. Bu durumda, ML deneme gönderimleri için eğitim betiklerinizdeki veri kümelerini kullanma hakkında daha fazla bilgi için Veri kümeleriyle eğitme sayfasını ziyaret edin.

Veri kümelerini filtreleme (önizleme)

Filtreleme özellikleri, sahip olduğunuz veri kümesinin türüne bağlıdır.

Önemli

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

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

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

Bu örnekler, belirtilen ifadelere göre kaydedilmemiş bir veri kümesi döndürür:

# 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'te her satır bir dosyanın yoluna karşılık gelir, bu nedenle sütun değerine göre filtreleme yardımcı olmaz. Ancak, meta verilere göre () satırları filtreleyebilirsiniz; örneğin, CreationTime, Size vb. Bu örnekler, belirtilen ifadelere göre kaydedilmemiş bir veri kümesi döndürür:

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

Resim etiketleme projelerinden oluşturulan etiketlenmiş veri kümeleri özel bir durum olarak kabul edilir. Bu veri kümeleri, görüntü dosyalarından oluşan bir TabularDataset türüdür. Bu veri kümeleri için görüntüleri meta verilere ve ve 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

Bir veri kümesini bölümlendirmek için, TabularDataset veya FileDataset oluştururken parametresini ekleyin partitions_format .

Bir veri kümesini bölümlediğinizde, her dosya yolunun bölüm bilgileri belirtilen biçime göre sütunlar halinde ayıklanır. Biçim, ilk bölüm anahtarının konumundan başlamalı ve dosya yolunun sonuna kadar devam etmelidir.

Örneğin, bölümün bölüm adına ve saate göre olduğu yolu ../Accounts/2019/01/01/data.jsonlgöz önünde bulundurulduğunda, partition_format='/{Department}/{PartitionDate:yyyy/MM/dd}/data.jsonl' 'Hesaplar' değerine sahip bir 'Department' dize sütunu ve değeriyle 2019-01-01'PartitionDate' tarih saat sütunu oluşturur.

Verilerinizde zaten bölümler varsa ve bu biçimi korumak istiyorsanız, filedataset oluşturmak için parametresini yönteminize from_files() ekleyinpartitioned_format.

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

Bu örnek

  • Bölümlenmiş dosyalardan FileDataset oluşturur
  • Bölüm anahtarlarını alır
  • Yeni, dizinli 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()

Partition_by() yöntemiyle TabularDatasets için yeni bir bölüm yapısı da 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 düzenledikten sonra veri kümenizi kaydedebilir ve model eğitimi öncesinde veri keşfi için not defterinize yükleyebilirsiniz.

FileDatasets için veri kümenizi bağlayabilir veya indirebilir ve normalde veri keşfi için kullandığınız Python kitaplıklarını uygulayabilirsiniz. Daha fazla bilgi için 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, veri çerçevesindeki verilerinizi görüntülemek için yöntemini kullanın to_pandas_dataframe() .

# preview the first 3 rows of titanic_ds
titanic_ds.take(3).to_pandas_dataframe()
(Dizin) PassengerId Hayatta Pclass Veri Akışı Adı Cinsiyet Yaş SibSp Parch Bilet Ücret Kabin Girişti
0 1 False 3 Braund, Bay Owen Harris erkek 22.0 1 0 A/5 21171 7.2500 S
1 2 True 1 Cumings, Bayan John Bradley (Florence Briggs Th... kadın 38.0 1 0 PC 17599 71.2833 C85 C
2 3 True 3 Heikkinen, bayan. Laina kadın 26.0 0 0 STON/O2. 3101282 7.9250 S

pandas veri çerçevesinden veri kümesi oluşturma

Bellek içi pandas veri çerçevesinden TabularDataset oluşturmak için yöntemini kullanın register_pandas_dataframe() . Bu yöntem TabularDataset'i çalışma alanına kaydeder ve verileri temel alınan depolama alanınıza yükler. Bu işlem depolama maliyetlerine neden olur.

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

Genel önizleme yöntemleriyle register_spark_dataframe() bellek spark veri çerçevesi veya dask veri çerçevesi içindeki bir TabularDataset oluşturun ve kaydedin.register_dask_dataframe() Bu yöntemler deneysel önizleme özellikleridir ve herhangi bir zamanda değişebilir.

Bu yöntemler verileri temel alınan depolama alanınıza yükler ve bunun sonucunda depolama maliyetlerine neden olur.

Veri kümelerini kaydetme

Oluşturma işlemini tamamlamak için veri kümelerinizi bir çalışma alanına kaydedin. register() Veri kümelerini çalışma alanınıza kaydetmek, başkalarıyla paylaşmak ve çalışma alanınızdaki denemelerde yeniden kullanmak için 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

Microsoft.machinelearningservices adresinde veri kümeleri oluşturmak için kullanılabilecek birçok şablon bulabilirsiniz.

Bu şablonlar hakkında bilgi için Azure Machine Learning için bir çalışma alanı oluşturmak üzere Azure Resource Manager şablonu kullanma bölümünü ziyaret edin.

Veri kümeleriyle eğitme

ML modellerini eğitmak için makine öğrenmesi denemelerinizde veri kümelerinizi kullanın. Veri kümeleriyle eğitim 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ümesi kaydedebilirsiniz. Veri kümesi sürümü, denemeler veya gelecekteki çoğaltmalar için veri kümesinin belirli bir sürümünü uygulamak üzere verilerinizin durumuna yer işareti ekleyebilir. Daha fazla bilgi için veri kümesi sürümlerini ziyaret edin.

# 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

  • Veri kümeleriyle eğitmeyi öğrenin
  • TabularDatasets ile eğitmek için otomatik makine öğrenmesini kullanma
  • Daha fazla veri kümesi eğitim örneği için örnek not defterlerine bakın