Я работаю над заданием TREC, в котором используются методы машинного обучения, где набор данных состоит из более чем 5 терабайт веб-документов, из которых планируются выделение векторов слов. scikit-learn
имеет хороший набор функций, которые, похоже, соответствуют моей потребности, но я не знаю, будет ли он масштабироваться для обработки больших данных. Например, HashingVectorizer
способен обрабатывать 5 терабайт документов, и можно ли его распараллелить? Более того, каковы некоторые альтернативы для масштабных задач машинного обучения?
Является ли scikit-learn подходящим для больших задач с данными?
Ответ 1
HashingVectorizer
будет работать, если вы итеративно обмениваете ваши данные пакетами 10k или 100k документов, которые подходят, например, в память.
Затем вы можете передать пакет преобразованных документов в линейный классификатор, который поддерживает метод partial_fit
(например, SGDClassifier
или PassiveAggressiveClassifier
), а затем итерации по новым партиям.
Вы можете начать забивать модель по установленному набору валидации (например, документы 10 тыс.), поскольку вы идете контролировать точность частично обученной модели, не дожидаясь появления всех образцов.
Вы также можете сделать это параллельно на нескольких машинах на разделах данных, а затем усреднить полученный атрибут coef_
и intercept_
, чтобы получить окончательную линейную модель для всего набора данных.
Я обсуждаю это в этом разговоре, который я дал в марте 2013 года в PyData: http://vimeo.com/63269736
В этом учебном пособии приведен пример кода, в котором парализует scikit-learn с помощью IPython.parallel, взятый из: https://github.com/ogrisel/parallel_ml_tutorial