обработка данных
April 11, 2023

Быстрый способ загрузки тренировочных данных для машинного обучения

Причина моего провала очевидна: я мало тренировался. И кроме того, я мало тренировался. И еще — я мало тренировался. Это если так, вкратце (Харуки Мураками). Во многих библиотеках машинного обучения есть встроенные способы загрузки наборов данных. В силу того, что scikit-learn является де-факто стандартом для разработки моделей, она обладает богатым инструментарием для этого. Он компактно сконцентрирован в модуле sklearn.datasets и для его первичного обзора проще всего воспользоваться функцией dir:

import sklearn.datasets
[it for it in dir(sklearn.datasets) if '__' not in it]

Так, популярна группа функций, начинающихся с load:

[it for it in dir(sklearn.datasets) if 'load' in it]

Функция позволяет получать результат в виде словаря или кортежа (параметр return_X_y) данных в форме датафреймов или numpy массивов (as_frame). Например, способ ниже демонстрирует, как выгрузить и признаки, и цель вместе в pandas датафрейм:

from sklearn.datasets import load_breast_cancer
import numpy as np

df = load_breast_cancer(as_frame=True)['frame']
df.head()

Аналогичную группу образуют функции, начинающиеся с fetch:

[it for it in dir(sklearn.datasets) if 'fetch' in it]

Результат извлекается аналогичными аргументами. Например, ниже демонстрируется выгрузка в один pandas датафрейм возвращенных в виде кортежа матрицы признаков и цели:

from sklearn.datasets import fetch_california_housing

df, y = fetch_california_housing(return_X_y=True, as_frame=True)
df['MedHouseVal'] = y
df.head()

Более мощный функционал предусмотрен в функции fetch_openml. Она загружает датасеты из открытого хранилища openml. Достаточно задать ей имя набора, который можно посмотреть на сайте в разделе datasets:

from sklearn.datasets import fetch_openml

df = fetch_openml('ozone-level-8hr', as_frame=True)['frame']
df.head()

Со слова make начинаются методы создания собственных синтетических наборов:

[it for it in dir(sklearn.datasets) if 'make' in it]

Кому интересно за деталями обращайтесь к более ранним статьям о том, как создавать наборы с make_classification для классификации и с make_blobs для кластеризации.