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'
Рекомендации
- Ваншорен, ван Рейн, Бишл и Торго «OpenML: сетевая наука в машинном обучении» , ACM SIGKDD Explorations Newsletter, 15 (2), 49-60, 2014.
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 для чтения и записи данных в этом формате.