2012-03-11 6 views
6

Мы учащиеся, которые пытаются обрабатывать данные размером около 140 миллионов записей и пытаются запустить несколько алгоритмов машинного обучения. мы новичок во всех облачных решениях и реализациях mahout. В настоящее время мы установили их в базе данных postgresql, но текущая реализация не масштабируется, и операции чтения/записи, кажется, очень медленны после многочисленных настроек производительности. Мы планируем для облачных сервисов.Amazon EC2 vs PiCloud

Мы изучили несколько возможных альтернатив. услуги

  1. Amazon облако основе (реализация Mahout)
  2. Picloud с scikits учиться (мы планировали использовать формат hdf5 с NumPy)
  3. Пожалуйста, порекомендуйте какие-либо другие варианты если таковые имеются.

Вот следующие вопросы

  1. Какой бы дают нам лучшие результаты (поворот вокруг времени) и будет экономически эффективным? Пожалуйста, упомяните о любых других альтернативах.
  2. В случае, если мы настроим услуги amazon, как мы должны иметь формат данных? Если мы будем использовать dynamodb, будет стоить взлететь?

Благодаря

ответ

5

PiCloud построен на вершине AWS, поэтому в любом случае вы будете использовать Amazon в конце дня. Вопрос в том, сколько инфраструктуры вам придется писать, чтобы все связалось. PiCloud дает некоторое бесплатное использование, чтобы поместить его через шары, чтобы вы могли его сначала отбросить. Я не использовал его сам, но ясно, что они пытаются обеспечить простоту развертывания для приложений типа машинного обучения.

Похоже, что это пытается получить результаты, а не быть облачным проектом, поэтому я бы либо изучил использование одной из других услуг Amazon, кроме прямого EC2 или другого другого программного обеспечения, такого как PiCloud или Heroku или другой сервис, который может забота о начальной загрузке.

7

Это зависит от характера проблемы машинного обучения, которую вы хотите решить. Я бы порекомендовал вам сначала подсуммировать ваш набор данных тем, что подходит в памяти (например, 100 тыс. Выборок с несколькими сотнями ненулевых функций на выборки, предполагая разреженное представление).

Тогда попробуйте несколько алгоритмов машинного обучения, которые масштабируются до большого количества образцов в scikit учиться:

  • SGDClassifier или MultinomialNB, если вы хотите сделать контролируемую классификацию (если у вас есть категорические этикетки для прогнозирования в вашем Набор данные)
  • SGDRegressor, если вы хотите сделать контролируемую регрессию (если у вас есть непрерывный целевые переменные для прогнозирования)
  • MiniBatchKMeans кластеризации сделать неконтролируемую кластеризацию (но тогда нет объективного способа количественной оценки качества полученных кластеров по умолчанию).
  • ...

Выполнить поиск сетки, чтобы найти оптимальные значения гиперпараметров модели (например, регуляризатор alpha и число проходов n_iter для SGDClassifier) ​​и оценки эффективности с помощью перекрестной проверки.

После выполнения повторите попытку с использованием 2-х больного набора данных (все еще подходящего в памяти) и убедитесь, что он значительно улучшает точность прогноза. Если это не так, не тратьте время на то, чтобы распараллелить это на кластере, чтобы запустить его на полном наборе данных, так как это не даст лучших результатов.

Если это то, что вы могли бы сделать, это шард данные на куски, затем слои данных на каждого узла, узнать о SGDClassifier или SGDRegressor модели на каждом узле независимо picloud и собрать обратно веса (coef_ и intercept_) и затем вычислите средние веса для построения конечной линейной модели и оцените ее на каком-то выдержанном фрагменте вашего набора данных.

Чтобы узнать больше об анализе ошибок. Есть взгляд на то, как построить обучения кривые:

0

Вы должны смотреть на Numba, если вы ищете взлетов скорости Numpy: https://github.com/numba/numba

Не решает проблему масштабирования облаков, но может сократить время на вычисление.

-1

Я только что сделал comparison между PiCloud & Amazon EC2> может быть полезно.