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

Машиноведение и большие данные

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

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

На простых примерах алгоритмы работают хорошо, и время работы приемлемо, тогда как большие данные представляют собой проблему, если вы пытаетесь запустить алгоритмы на моем ПК. Что касается программного обеспечения, у меня достаточно опыта для реализации любого алгоритма из статей или дизайна, которые я сам использую на любом языке или в среде IDE (до сих пор использовали Matlab, Java с Eclipse,.NET...), но до сих пор не имеют большого опыта в настройке инфраструктуры. Я начал узнавать о Hadoop, базах данных NoSQL и т.д., Но не знаю, какая стратегия будет наилучшей с учетом ограничений времени обучения.

Конечная цель - создать рабочую платформу для анализа больших данных с упором на реализацию моих собственных алгоритмов машинного обучения и собрать все вместе в производство, готовые к решению полезного вопроса путем обработки больших данных.

Поскольку основное внимание уделяется внедрению алгоритмов машинного обучения, я хотел бы спросить, существует ли какая-либо существующая рабочая платформа, предлагающая достаточно ресурсов ЦП для подачи больших данных, загрузки собственных алгоритмов и просто обработки данных, не думая о распределенной обработке.

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

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

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

4b9b3361

Ответ 1

Прежде всего, ваш вопрос должен более четко определить, что вы намерены делать с помощью больших данных.

Действительно, Big Data - это модное слово, которое может ссылаться на различные проблемы. Я склонен определять большие данные как категорию проблем, где размер данных или время вычисления достаточно велики для того, чтобы "абстракции аппаратного обеспечения стали нарушены", а это означает, что один товарный аппарат не может выполнять вычисления без интенсивного ухода за вычислениями и памятью.

Порог шкалы, по которому данные становятся большими данными, поэтому неясен и чувствителен к вашей реализации. Ограничен ли ваш алгоритм пропускной способностью жесткого диска? Имеет ли он ноги в память? Вы пытались избежать ненужных квадратичных затрат? Вы приложили все усилия для повышения эффективности кеширования и т.д.

С многолетним опытом работы над крупномасштабной проблемой машинного обучения (до 250 сотен товарных машин) я твердо верю, что многие проблемы, которые, как представляется, требуют распределенной инфраструктуры, могут фактически выполняться на одной товарной машине, если проблема выражается правильно. Например, вы указываете крупномасштабные данные для розничных торговцев. Я работаю над этой конкретной темой в течение нескольких лет, и мне часто приходилось делать все вычисления на одной машине, при условии некоторой оптимизации. Моя компания работает над простым пользовательским форматом данных, который позволяет хранить один год всех данных от очень крупного розничного торговца в пределах 50 ГБ, а это означает, что один товарный жесткий диск может содержать 20 лет истории. Вы можете посмотреть пример: https://github.com/Lokad/lokad-receiptstream

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

С точки зрения практиков, возможность выполнения заданного алгоритма интеллектуального анализа данных или машинного обучения за 30 секунд является ключевым фактором эффективности. Я заметил, что когда некоторые вычисления, будь то последовательные или распределенные, занимают 10 минут, мой фокус и эффективность, как правило, быстро падают, так как становится намного сложнее быстро и быстро тестировать новые идеи. Накладные расходы на задержку, введенные многими распределенными структурами, таковы, что вы неизбежно будете в этом сценарии с низкой эффективностью.

Если масштаб проблемы таков, что даже с сильными усилиями вы не можете выполнить ее на одной машине, я настоятельно рекомендую прибегнуть к распределенным структурам на полке вместо того, чтобы создавать свои собственные. Одной из наиболее известных рамок является абстракция MapReduce, доступная через Apache Hadoop. Hadoop можно запускать на кластере из 10 тысяч узлов, вероятно, намного больше, чем вам когда-либо понадобится. Если вы не владеете оборудованием, вы можете "арендовать" использование кластера Hadoop, например, через Amazon MapReduce.

К сожалению, абстракция MapReduce не подходит для всех вычислений машинного обучения. Что касается машинного обучения, MapReduce является жесткой структурой, и многочисленные случаи оказались трудными или неэффективными для адаптации к этой структуре:

- Структура MapReduce сама по себе связана с функциональным программированием. Процедура карты применяется к каждому блоку данных независимо. Следовательно Каркас MapReduce не подходит для алгоритмов, в которых применение Процедура карты для некоторых фрагментов данных требует результатов той же процедуры для другие фрагменты данных как необходимое условие. Другими словами, структура MapReduce не подходит, когда вычисления между различными частями данных не являются независимыми и налагают определенную хронологию.

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

- Большинство реализаций MapReduce были разработаны для удовлетворения производственных потребностей и робастности. В результате основная проблема структуры заключается в обработке аппаратных сбоев и гарантировать результаты вычислений. Эффективность MapReduce следовательно, частично снижается этими ограничениями надежности. Например, сериализация на жестких дисках результатов вычислений оказывается довольно дорогостоящей в некоторых случаях.

- MapReduce не подходит для асинхронных алгоритмов.

Опрос структуры MapReduce привел к более богатым распределенным фреймворкам, где большему контролю и свободе предоставляется пользователю Framework, по цене, большей сложности для этого пользователя. Среди этих структур хорошо известны GraphLab и Dryad (оба основаны на прямых ациклических графиках вычислений).

Как следствие, нет рамки "Один размер подходит всем", например, нет решения для хранения данных "Один размер подходит всем".

Чтобы начать с Hadoop, вы можете взглянуть на книгу Hadoop: окончательное руководство Tom White

Если вас интересует, как масштабные рамки подходят для требований машинного обучения, вас может заинтересовать вторая глава (на английском языке) моего доктора философии, доступная здесь: http://tel.archives-ouvertes.fr/docs/00/74/47/68/ANNEX/texfiles/PhD%20Main/PhD.pdf

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

edit: еще одна ссылка, которая может оказаться интересной: Масштабирование машинного обучения

Ответ 2

Мне пришлось реализовать пару алгоритмов Data Mining для работы с BigData, и я закончил использовать Hadoop. Я не знаю, знакомы ли вы Mahout (http://mahout.apache.org/), который уже имеет несколько алгоритмов, готовых к использованию с Hadoop.

Тем не менее, если вы хотите реализовать свой собственный алгоритм, вы все равно можете адаптировать его к парадигме Hadoop MapReduce и получить хорошие результаты. Это отличная книга о том, как адаптировать алгоритмы искусственного интеллекта к MapReduce:

Добыча массивных наборов данных - http://infolab.stanford.edu/~ullman/mmds.html

Ответ 3

Это, кажется, старый вопрос. Однако, учитывая ваши возможности, основными рамками, посвященными компьютерному обучению в области больших данных, являются Mahout, Spark (MLlib), H2O и т.д. Однако для запуска алгоритмов машинного обучения на больших данных вам необходимо преобразовать их в параллельные программы на основе парадигмы Map Reduce. Это хорошая статья, дающая краткое введение в основные (не все) большие рамки данных:

http://www.codophile.com/big-data-frameworks-every-programmer-should-know/

Надеюсь, это поможет.

Ответ 4

Чем больше данных у вас есть, тем точнее должно быть предсказание (если вы не испортите некоторые основные предположения), и это не имеет отношения к выбранному алгоритму. Выбранный алгоритм повлияет на эффективность вашего программного обеспечения/системы. После определенного момента каждый алгоритм будет сходиться и не будет эффективным. Вам нужно развернуть правильный startegy для объединения/данных/вычислительной мощности/типа проблемы.

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

Ответ 5

Рената: Появился новый URL-адрес для URL-адреса "Массив массивных наборов данных".

http://www.mmds.org/index2.html