7.4. Загрузка других наборов данных

7.4.1. Примеры изображений

Scikit-learn также встраивает несколько образцов изображений в формате JPEG, опубликованных их авторами по лицензии Creative Commons. Эти изображения могут быть полезны для тестирования алгоритмов и конвейеров на 2D-данных.

load_sample_images()Загрузите образцы изображений для обработки изображений.
load_sample_image(имя_изображения)Загрузите массив numpy одного образца изображения

Предупреждение

Кодирование изображений по умолчанию основано на uint8 dtype, чтобы освободить память. Часто алгоритмы машинного обучения работают лучше всего, если входные данные сначала преобразуются в представление с плавающей запятой. Кроме того, если вы планируете использовать matplotlib.pyplpt.imshow, не забудьте масштабировать до диапазона 0–1, как показано в следующем примере.

7.4.2. Наборы данных в формате svmlight / libsvm

scikit-learn включает служебные функции для загрузки наборов данных в формате svmlight / libsvm. В этом формате каждая строка принимает форму <label> <feature-id>:<feature-value> <feature-id>:<feature-value> …. Этот формат особенно подходит для разреженных наборов данных. В этом модуле scipy разреженные матрицы CSR используются для X а массивы numpy используются для y

Вы можете загрузить набор данных следующим образом:

>>> from sklearn.datasets import load_svmlight_file
>>> X_train, y_train = load_svmlight_file("/path/to/train_dataset.txt")
...        

Вы также можете загрузить два (или более) набора данных одновременно:

>>> X_train, y_train, X_test, y_test = load_svmlight_files(
...     ("/path/to/train_dataset.txt", "/path/to/test_dataset.txt"))
...  

В этом случае X_trainи X_testгарантированно будет такое же количество функций. Другой способ добиться того же результата — исправить количество функций:

>>> X_test, y_test = load_svmlight_file(
...     "/path/to/test_dataset.txt", n_features=X_train.shape[1])
...    

Ссылки по теме:

Публичные наборы данных в формате svmlight / libsvm : https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets
Более быстрая реализация, совместимая с API : https://github.com/mblondel/svmlight-loader

7.4.3. Скачивание наборов данных из репозитория openml.org

openml.org — это общедоступный репозиторий для данных машинного обучения и экспериментов, который позволяет всем загружать открытые наборы данных.

sklearn.datasetsПакет может загрузить наборы данных из хранилища с помощью функции sklearn.datasets.fetch_openml.

Например, чтобы загрузить набор данных экспрессии генов в мозге мышей:

>>> from sklearn.datasets import fetch_openml
>>> mice = fetch_openml(name='miceprotein', version=4)

Чтобы полностью указать набор данных, вам необходимо указать имя и версию, хотя версия не является обязательной, см. « Версии набора данных»  ниже. Набор данных содержит в общей сложности 1080 примеров, относящихся к 8 различным классам:

>>> mice.data.shape
(1080, 77)
>>> mice.target.shape
(1080,)
>>> np.unique(mice.target)
array(['c-CS-m', 'c-CS-s', 'c-SC-m', 'c-SC-s', 't-CS-m', 't-CS-s', 't-SC-m', 't-SC-s'], dtype=object)

Вы можете получить более подробную информацию о наборе данных, глядя на DESCR и details атрибуты:

>>> print(mice.DESCR) 
**Author**: Clara Higuera, Katheleen J. Gardiner, Krzysztof J. Cios
**Source**: [UCI](https://archive.ics.uci.edu/ml/datasets/Mice+Protein+Expression) - 2015
**Please cite**: Higuera C, Gardiner KJ, Cios KJ (2015) Self-Organizing
Feature Maps Identify Proteins Critical to Learning in a Mouse Model of Down
Syndrome. PLoS ONE 10(6): e0129126...

>>> mice.details 
{'id': '40966', 'name': 'MiceProtein', 'version': '4', 'format': 'ARFF',
'upload_date': '2017-11-08T16:00:15', 'licence': 'Public',
'url': 'https://www.openml.org/data/v1/download/17928620/MiceProtein.arff',
'file_id': '17928620', 'default_target_attribute': 'class',
'row_id_attribute': 'MouseID',
'ignore_attribute': ['Genotype', 'Treatment', 'Behavior'],
'tag': ['OpenML-CC18', 'study_135', 'study_98', 'study_99'],
'visibility': 'public', 'status': 'active',
'md5_checksum': '3c479a6885bfa0438971388283a1ce32'}

DESCR cодержит свободный текст описания данных, в то время как details содержит словарь мета-данных , которые хранятся openml, как набор данных ид. Дополнительные сведения см. В документации OpenML. Набор data_id данных белка мышей — 40966, и вы можете использовать это (или имя), чтобы получить дополнительную информацию о наборе данных на веб-сайте openml:

>>> mice.url
'https://www.openml.org/d/40966'

Также data_id уникально идентифицирует набор данных из OpenML:

>>> mice = fetch_openml(data_id=40966)
>>> mice.details 
{'id': '4550', 'name': 'MiceProtein', 'version': '1', 'format': 'ARFF',
'creator': ...,
'upload_date': '2016-02-17T14:32:49', 'licence': 'Public', 'url':
'https://www.openml.org/data/v1/download/1804243/MiceProtein.ARFF', 'file_id':
'1804243', 'default_target_attribute': 'class', 'citation': 'Higuera C,
Gardiner KJ, Cios KJ (2015) Self-Organizing Feature Maps Identify Proteins
Critical to Learning in a Mouse Model of Down Syndrome. PLoS ONE 10(6):
e0129126. [Web Link] journal.pone.0129126', 'tag': ['OpenML100', 'study_14',
'study_34'], 'visibility': 'public', 'status': 'active', 'md5_checksum':
'3c479a6885bfa0438971388283a1ce32'}

7.4.3.1. Версии набора данных

Набор данных однозначно определяется data_id своим именем, но не обязательно своим именем. Может существовать несколько разных «версий» набора данных с одним и тем же именем, которые могут содержать совершенно разные наборы данных. Если в определенной версии набора данных обнаружены серьезные проблемы, ее можно отключить. Использование имени для указания набора данных даст самую раннюю версию набора данных, которая все еще активна. Это означает, что fetch_openml(name="miceprotein") в разное время могут быть получены разные результаты, если более ранние версии становятся неактивными. Вы можете видеть, что набор данных с data_id 40966, который мы получили выше, является первой версией набора данных «miceprotein»:

>>> mice.details['version']  
'1'

Фактически, у этого набора данных есть только одна версия. С другой стороны, набор данных iris имеет несколько версий:

>>> iris = fetch_openml(name="iris")
>>> iris.details['version']  
'1'
>>> iris.details['id']  
'61'

>>> iris_61 = fetch_openml(data_id=61)
>>> iris_61.details['version']
'1'
>>> iris_61.details['id']
'61'

>>> iris_969 = fetch_openml(data_id=969)
>>> iris_969.details['version']
'3'
>>> iris_969.details['id']
'969'

Указание набора данных по имени «iris» дает самую низкую версию, версию 1, с data_id 61. Чтобы быть уверенным, что вы всегда получаете именно этот набор данных, безопаснее всего указывать его по набору данных data_id. Другой набор данных с data_id 969 — это версия 3 (версия 2 стала неактивной) и содержит бинаризованную версию данных:

>>> np.unique(iris_969.target)
array(['N', 'P'], dtype=object)

Вы также можете указать имя и версию, которые также однозначно идентифицируют набор данных:

>>> iris_version_3 = fetch_openml(name="iris", version=3)
>>> iris_version_3.details['version']
'3'
>>> iris_version_3.details['id']
'969'

Рекомендации

7.4.4. Загрузка из внешних наборов данных

scikit-learn работает с любыми числовыми данными, хранящимися в виде массивов numpy или scipy разреженных матриц. Другие типы, которые можно преобразовать в числовые массивы, такие как pandas DataFrame, также приемлемы.

Вот несколько рекомендуемых способов загрузки стандартных столбчатых данных в формат, используемый scikit-learn:

  • pandas.io предоставляет инструменты для чтения данных из распространенных форматов, включая CSV, Excel, JSON и SQL. DataFrames также могут быть созданы из списков кортежей или dicts. Pandas плавно обрабатывает разнородные данные и предоставляет инструменты для обработки и преобразования в числовой массив, подходящий для scikit-learn.
  • scipy.io специализируется на двоичных форматах, часто используемых в контексте научных вычислений, таких как .mat и .arff.
  • numpy / routines.io для стандартной загрузки столбчатых данных в массивы numpy
  • scikit-learn datasets.load_svmlight_fileдля разреженного формата svmlight или libSVM
  • scikit-learn datasets.load_filesдля каталогов текстовых файлов, где имя каждого каталога является именем каждой категории, а каждый файл внутри каждого каталога соответствует одному образцу из этой категории

Для некоторых различных данных, таких как изображения, видео и аудио, вы можете обратиться к:

  • skimage.io или Imageio для загрузки изображений и видео в массивы numpy
  • scipy.io.wavfile.read для чтения файлов WAV в массив numpy

Категориальные (или номинальные) функции, хранящиеся в виде строк (распространенные в pandas DataFrames), потребуют преобразования в числовые функции с помощью OneHotEncoder или OrdinalEncoder или аналогичного. См. Раздел «Предварительная обработка данных» .

Примечание: если вы управляете своими собственными числовыми данными, рекомендуется использовать оптимизированный формат файла, такой как HDF5, чтобы сократить время загрузки данных. Различные библиотеки, такие как H5Py, PyTables и pandas, предоставляют интерфейс Python для чтения и записи данных в этом формате.