Подтвердить что ты не робот

Sklearn и большие наборы данных

У меня есть набор данных размером 22 ГБ. Я хотел бы обработать его на своем ноутбуке. Конечно, я не могу загрузить его в память.

Я использую много sklearn, но для гораздо меньших наборов данных.

В этих ситуациях классический подход должен быть чем-то вроде.

Только чтение части данных → Частичная поездка вашей оценки → удалить данные → прочитать другую часть данных → продолжить тренировку вашего оценщика.

Я видел, что некоторый алгоритм sklearn имеет метод частичной подгонки, который позволяет нам обучать оценку с помощью различных подвыборки данных.

Теперь мне интересно, почему так легко сделать это в sklearn? Я ищу что-то вроде

r = read_part_of_data('data.csv')
m = sk.my_model
`for i in range(n):
     x = r.read_next_chunk(20 lines)
     m.partial_fit(x)

m.predict(new_x)

Может быть, sklearn - не самый подходящий инструмент для такого рода вещей? Дайте мне знать.

4b9b3361

Ответ 1

Я думаю, что sklearn отлично подходит для больших данных. Если выбранные вами алгоритмы поддерживают partial_fit или онлайн-подход к обучению, вы находитесь на пути. Одна вещь, о которой нужно знать, это то, что размер вашего куска может повлиять на ваш успех.

Эта ссылка может быть полезна... Работа с большими данными в python и numpy, не хватает памяти, как сохранить частичные результаты на диске?

Я согласен с тем, что h5py полезен, но вы можете использовать инструменты, которые уже находятся в вашем колчане.

Еще одна вещь, которую вы можете сделать, - случайно выбрать, сохранять ли строку в вашем файле csv... и сохранять результат в .npy файле, чтобы он загружался быстрее. Таким образом, вы получаете выборку своих данных, которая позволит вам начать играть с ней со всеми алгоритмами... и решать проблему с большими объемами данных (или вообще нет), иногда образец с хорошим подходом достаточно хорош в зависимости от того, что вы хотите).

Ответ 2

Я использовал несколько классификаторов scikit-learn с внеурочными возможностями для обучения линейных моделей: Stochastic Gradient, Perceptron и Passive Agressive, а также Multinomial Naive Bayes на наборе данных Kaggle более 30 ГБ. Все эти классификаторы разделяют метод partial_fit, о котором вы упоминаете. Некоторые ведут себя лучше других.

В этой статье вы можете найти методологию, тематическое исследование и некоторые хорошие ресурсы: http://www.opendatascience.com/blog/riding-on-large-data-with-scikit-learn/

Ответ 4

Мне интересно, что вы решили использовать Python для статистического анализа, а не R, но я бы начал с того, что мои данные были в формате, который может обрабатывать такие большие наборы данных. Пакет python h5py является фантастическим для такого хранилища, что позволяет очень быстро получить доступ к вашим данным. Вам нужно будет разбить ваши данные в разумных размерах, скажем, 1 миллион кусков элементов, например. 20 столбцов х 50 000 строк, записывающих каждый фрагмент в файл H5. Затем вам нужно подумать о том, какую модель вы используете, что вы на самом деле не указали.

Дело в том, что вам, вероятно, придется написать алгоритм для модели и проверки перекрестных ссылок на машины, поскольку данные велики. Начните с написания алгоритма для суммирования данных, чтобы вы знали, что вы смотрите. Затем, как только вы решите, какую модель вы хотите запустить, вам нужно будет подумать о том, какова будет перекрестная проверка. Поместите "столбец" в каждый фрагмент набора данных, который обозначает, к какой проверке относится каждая строка. Многие из вас предпочитают маркировать каждый кусок конкретному набору валидации.

Затем вам нужно будет написать алгоритм стиля сокращения карты, чтобы запустить вашу модель на поднаборах проверки. Альтернативой является просто запустить модели на каждом куске каждого набора валидаций и усреднить результат (рассмотрим теоретическую обоснованность этого подхода).

Рассмотрим использование искры, или R и rhdf5, или что-то подобное. Я не предоставлял никакого кода, потому что это проект, а не просто простой вопрос о кодировании.

Ответ 5

Вы можете взглянуть на Dask или Graphlab

Они похожи на pandas, но работают с крупномасштабными данными (с использованием встроенных фреймов данных). Проблема с pandas заключается в том, что все данные должны вписываться в память.

Оба фреймворка могут использоваться с обучением scikit. Вы можете загрузить 22 ГБ данных в Dask или SFrame, а затем использовать с sklearn.