Изменения

Перейти к: навигация, поиск

Обучение на больших данных

30 847 байт добавлено, 19:30, 4 сентября 2022
м
rollbackEdits.php mass rollback
'''Обучение на больших данных''' {{В разработке---}}раздел машинного обучения, специализирующийся на построении моделей, обрабатывающих большие объёмы данных. Также встречаются термины "big data" или "большие данные".
'''Обучение на == Понятие больших данных''' {{---}} раздел машинного обучения, специализирующийся на построении моделей, обрабатывающих большие объёмы данных, т. н. "big data" или "большие данные".==
=== Терминология и история ===
== Терминология и история ==
Сам термин "большие данные" часто трактуется очень неоднозначно, так как в ходе истории компьютерной техники объём данных и носителей этих данных возрастал в геометрической прогрессии. 50 лет назад жёсткий диск на 5 мегабайт нельзя было поднять без помощи автопогрузчика. В наши же дни маленькая коробочка весом в полкило может вмещать до нескольких терабайт данных (а то и десятков терабайт), а данные, хранящиеся на различных серверах можно исчислять петабайтами. Поэтому вопрос, какие же данные считать большими, довольно запутанный.
В качестве универсального решения было принято так, что те данные, которые невозможно уместить на одном сервере, можно называть "большими". Но это далеко не все признаки "больших" данных. В наше время на серверных кластерах информация постоянно двигается, существует понятие "поток данных", генерируется много новой информации, и всё это постоянно записывается и перезаписывается. Из-за этого также возникает ряд проблем, но об этом позже.
=== Признаки больших данных. Правило VVV ===Чтобы массив информации обозначить приставкой «big» он должен обладать следующими признаками<ref name="vvv">[https://ru.wikipedia.org/wiki/%D0%91%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5#VVV Правило VVV]</ref>:* Volume (Объем) {{---}} данные измеряются по физической величине и занимаемому пространству на цифровом носителе. К «big» относят массивы свыше 150 Гб в сутки.;* Velocity (Скорость, обновление) {{---}} информация регулярно обновляется и для обработки в реальном времени необходимы интеллектуальные технологии <ref name="inttech">[https://studme.org/200941/informatika/intellektualnye_tehnologii_primenenie Интеллектуальные технологии]</ref> в рамках больших данных.;
* Variety (Разнообразие) {{---}} информация в массивах может иметь неоднородные форматы, быть структурированной частично, полностью и скапливаться бессистемно. Например, социальные сети используют большие данные в виде текстов, видео, аудио, финансовых транзакций, картинок и прочего.
В современных системах рассматриваются два дополнительных фактора:
* Variability (Изменчивость) {{---}} потоки данных могут иметь пики и спады, сезонности, периодичность. Всплески неструктурированной информации сложны в управлении, требует мощных технологий обработки.;
* Value (Значение данных) {{---}} информация может иметь разную сложность для восприятия и переработки, что затрудняет работу интеллектуальным системам. Например, массив сообщений из соцсетей {{---}} это один уровень данных, а транзакционные операции {{---}} другой. Задача машин определить степень важности поступающей информации, чтобы быстро структурировать.
== Особенности и трудности работы с большими данными ==При работе с большими данными важно помнить некоторые их особенности:* Данных очень много. Поэтому необходимо хранилище соответствующего размера, которое, как правило, является распределённым;* Любая попытка обработать большие данные целиком скорее всего приведёт к очень длительному ожиданию результата, если обработка происходит традиционными способами (например, чтение массива в цикле);* В связи с большим потоком данных, конечный их набор постоянно изменяется, поэтому необходимо анализировать данные особым образом. Так, чтобы своевременно актуализировать информацию о них;
Также стоит отметить=== Порядок работы с большими данными ===Чтобы эффективно обрабатывать и анализировать большие данные, существуют такие инструменты как "аналитические модели"<ref name="analiticsmodels">[https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C Математические модели в форме аналитических моделей]</ref>. Их решения ищутся в замкнутом виде, что в связи с большой популярностью "виде функциональных зависимостей. Такие модели способны строить гипотезы на основе больших данных", эта сфера очень быстро развивается, постоянно появляются всё новые технологии искать в них зависимости и инструменты закономерности {{---}} всю самую полезную для работыбольшинства бизнес-задач информацию. Для бизнеса Кроме того, важна хорошая [[Интерпретируемые модели|интерпретируемость]] построенной модели, так как это приводит к дополнительным материальным затратампозволяет упростить её анализ без повторного её построения, т. к. что при работе с большими данными крайне важно "идти в ногу со временем". Для специалистов по "большим данным" это так же приводит к дополнительным трудностям, т. к. необходимо крайне быстро овладевать этими новыми технологиями.этого большие данные проходят через несколько этапов:
== Порядок работы с большими данными ==Чтобы эффективно обрабатывать и анализировать большие данные, существуют такие инструменты как "1. [[https://ru.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C аналитические моделиАвтоматическое машинное обучение|Чистка данных]]"(англ. Такие модели способны строить гипотезы на основе больших данныхdata cleaning) {{---}} поиск и исправление ошибок в первичном наборе информации, например, искать в них зависимости и закономерности ошибки ручного ввода (опечатки) или некорректные значения с измерительных приборов из- всю самую полезную для большинства бизнес-задач информацию. Для этого большие данные проходят через несколько этапов:за кратковременных сбоев;
12. [http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5#.D0.9A.D0.BE.D0.BD.D1.81.D1.82.D1.80.D1.83.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_.D0.BF.D1.80.D0.B8.D0.B7.D0.BD.D0.B0.D0.BA.D0.BE.D0.B2 Чистка данных[Уменьшение размерности|Работа с признаками]] (англ. data cleaningfeature engineering) – поиск и исправление ошибок в первичном наборе информации, например, ошибки ручного ввода (опечатки), некорректные значения с измерительных приборов из{{---за кратковременных сбоев и т.д.}} генерация переменных для построения аналитических моделей;
23. [http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D0%BC%D0%B5%D0%BD%D1%8C%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D0%B8#.D0.92.D1.8B.D0.B1.D0.BE.D1.80_.D0.BF.D1.80.D0.B8.D0.B7.D0.BD.D0.B0.D0.BA.D0.BE.D0.B2 Работа с признаками] (англ. feature engineering) – генерация переменных для построения аналитических моделей; 3. [http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80 Модель алгоритма и её выбор|Построение]] и обучение аналитической модели (англ. model selection) для предсказания целевой (таргетной) переменной. Так проверяются гипотезы о зависимости таргетной переменной от предикторов;.
На практике это помогает решить множество задач. Например, проанализировать, как связаны отказы оборудования с условиями подачи напряжения, или определить вероятность своевременного возврата кредита частным заемщиком.
=== Методы обработки больших данных ===
К основным методам сбора и анализа больших данных относят следующие:
* глубинный анализ или "Добычадобыча" данных (англ. data mining<ref name="datamining">[https://ru.wikipedia.org/wiki/Data_mining Data Mining]</ref>) – обучение ассоциативным правилам, классификация, кластерный и регрессионный анализ;* краудсорсинг — категоризация и обогащение данных народными силами, т.е. с добровольной помощью сторонних лиц;
* смешение и интеграция разнородных данных, таких как, цифровая обработка сигналов и обработка естественного языка;
* машинное обучение, включая искусственные нейронные сети, сетевой анализ, методы оптимизации и генетические алгоритмы;
* визуализация аналитических данных — рисунки, графики, диаграммы, таблицы.
Здесь ещё стоит отметить, что чаще всего любой процесс обработки больших данных является распределённым. Это достигается за счёт того, что большие данные практически всегда хранятся на кластерах серверов, а не на одном сервере. Каждый из них может производить вычисления и операции над данными. Например, задачу подсчёта минимального значения в больших данных можно распараллелить на те сервера, где эти данные хранятся, а затем уже их результаты сравнить и получить глобальный минимум. Этот процесс неплохо масштабируется, если говорить об объединении кластеров серверов в ещё большие кластеры. === Практическое применение Big Data Трудности работы с большими данными ===На сегодняшний день работа При работе с большими данными популярна во многих рабочих сферахважно помнить некоторые их особенности:* Данных очень много. Как Поэтому необходимо хранилище соответствующего размера, которое, как правило, алгоритмы обрабатывают огромные потоки является распределённым;* Любая попытка обработать большие данные целиком скорее всего приведёт к очень длительному ожиданию результата, если обработка происходит традиционными способами (например, чтение массива в цикле);* В связи с большим потоком данных, конечный их набор постоянно изменяется, поэтому необходимо анализировать данные особым образом. Так, чтобы своевременно актуализировать информацию о них;* При возникновении ошибок в модели приходится тратить очень много ресурсов на их поиск и устранение, так как объёмы данных очень велики;* Возникает проблема разнородности данных из . Необходимо уметь обрабатывать данные различных источниковформатов в рамках одной системы. Например, описания книг, фильмов и музыки; Также стоит отметить, что в связи с большой популярностью "больших данных", эта сфера очень быстро развивается, постоянно появляются всё новые технологии и инструменты для работы. Для развивающегося бизнеса внедрение систем по работе с большими данными приводит к дополнительным материальным затратам. А от специалистов в этой сфере требуется быстро овладевать новыми навыками, после чего создается предсказание следующего предполагаемого событиячто также может вызвать затруднения. === Применение машинного обучения к большим данным. Поиск в больших данных ===Можно выделить несколько областейПри работе с большими данными иногда возникает ситуация, где использование когда пользователю нужно найти какие-то конкретные данные. Возникает задача эффективного поиска информации в больших данных набирает популярность. В силу большого объёма всех данных большинство известных методов поиска будут работать неэффективно. Например, '''''поиск перебором'''''<ref ="bruteforcesearch">[https://en.wikipedia.org/wiki/Brute-force_search#:~:text=In%20computer%20science%2C%20brute%2Dforce,candidate%20satisfies%20the%20problem's%20statement. Поиск перебором]</ref> (англ. ''exhaustive search'') {{---}} широко распространенный алгоритм не подходит для больших данных вследствие плохой оптимизации по времени исполнения и используемому месту. Также '''не подходят''' алгоритмы '''''поиска с ориентиром (индексирование)''''' (англ. ''beacon guided searching, BGS'') и [[Метрический классификатор и метод ближайших соседей|'''''метод "ближайших соседей"''''']] (англ. ''nearest neighbour search''). В случае первого на больших данных хранение индексов этих данных становится проблемой, так как данных слишком много, а в случае со вторым алгоритмом будут сильно мешать различные шумы и отклонения, коих в больших данных зачастую очень много. * Бизнес и МаркетингЗдесь на помощь приходят [https://ru.wikipedia.org/wiki/%D0%93%D0%B5%D0%BD%D0%B5%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC генетические алгоритмы]. С помощью анализа последних произведенных транзакций Процедура поиска в больших данных производится довольно часто, следовательно такие алгоритмы довольно быстро приспособятся к поиску наиболее часто используемых данных. Также к плюсам генетических алгоритмов можно отнести возможность кастомизации и устойчивость к шумам, а также хорошую масштабируемость для задач с достаточно более высокой точностью могут предсказать повышение спроса размерностью. Всё это как раз то, что нужно в случае больших данных. Кроме того, при поиске в больших данных может помочь [[Кластеризация|кластеризация]] этих данных. Таким образом они будут разбиты на определенный товаргруппы "похожести", когда данные в каждой группе обладают сходными признаками, по которым можно существенно снизить круг дальнейшего поиска, что существенно ускоряет процесс поиска.* Социальные сетиС той же целью может применятся и оценка '''''важности признака при перестановке'''''<ref name="pfi">[https://docs.microsoft.com/ru-ru/dotnet/machine-learning/how-to-guides/explain-machine-learning-model-permutation-feature-importance-ml-net#train-the-model Permutation Feature Importance]</ref> (англ. ''permutation feature importance, PFI''). Этот приём позволяет выделить наиболее значимые признаки объектов. Заключается он в том, что после первоначального обучения некоторой модели происходит случайная перестановка значений признаков у объектов. У некоторых соцсетей уже За итерацию берётся некоторый признак, который есть встроенные алгоритмы анализа истории активности пользователейу всех объектов, и происходит случайная перестановка значений этого признака между объектами. При этом оставшиеся признаки не изменяются. Далее происходит повторный запуск модели и производится расчёт отклонений её результатов от первичных. Такая процедура выполняется для всех признаков, чтобы можно было выделить наиболее значимые. Это может существенно помочь в задаче поиска, когда можно снизить количество рассматриваемых признаков, принимая во внимание только наиболее значимые.Например, существует некоторый набор данных, содержащий информацию о продаваемой недвижимости. Каждый объект недвижимости имеет множество признаков: местоположение относительно объектов инфраструктуры, уровень благополучия данного района города, и многие другие. Исходя В этом случае при помощи приёма PFI можно рассчитать, какие из предпочтений пользователя этих признаков имеют большее влияние на цену объекта недвижимости. == Обработка разнородных данных в рамках одной системы == === "Озеро" данных ===При работе с большими данными часто возникает ситуация, когда одна и популярности некоторых сообществта же модель должна уметь обрабатывать данные различного формата. Это позволяет строить аналитические модели точнее и получать более достоверную информацию о данных в дальнейшем. Также отметим, что в данной ситуации данные берутся из множества '''различных''' источников, которые приближены и определяют формат получаемых данных. Рассмотрим модель распределенного хранения разнородных данных в концепции '''''«озеро данных»'''''<ref name="datalake">[https://en.wikipedia.org/wiki/Data_lake Озеро данных]</ref>. ::<tex>S=\langle\{DT\}_{i=1}^{n_{st}},\{SS\}_{j=1}^{m_{ss}},\{E\}_{k=1}^{p_e},IS,DS\rangle</tex>: * <tex>\{DT\}_{i=1}^{n_{st}}</tex> {{---}} множество шаблонов данных;* <tex>\{SS\}_{j=1}^{m_{ss}}</tex> {{---}} методы разбиения разнородных данных;* <tex>\{E\}_{k=1}^{p_e}</tex> {{---}} множество исполнителей задач сбора данных;* <tex>n_{st}</tex> {{---}} количество шаблонов данных;* <tex>m_{ss}</tex> {{---}} количество типов данных;* <tex>IS</tex> {{---}} метод индексирования данных в хранилище озера данных;* <tex>DS</tex> {{---}} структура озера разнородных данных. Данная модель позволяет хранить как сырые разнородные данные, так и структурированные данные в соответствии с предопределенной схемой. Такой результат достигается наличием шаблонов объектов и шаблонов параметров объектов. Также это позволяет снизить временные затраты на доступ к его интересамданным. === Схема модели хранения разнородных данных === [[Файл:Schema.PNG|700px|thumb|right|Рисунок 1: Модель хранения разнородных данных<ref name="datalake_pic">[http://www.vstu.ru/upload/iblock/ed2/ed26c52e2ff99fb5b39fbaf37717a96c.pdf Модель хранения разнородных данных - схема озера данных]</ref>]] Рассмотрим схему модели, изображённую на рисунке 1: * '''Object template''' {{---}} шаблон некоторого объекта <tex>O</tex>. Каждый объект может иметь множество источников данных <tex>M_{ds}</tex>. Структуру объекта можно представить следующим образом: <tex>O=\langle ds_1, ds_2, \dots, ds_m \rangle</tex>. * '''Data source template''' {{---}} шаблон источника данных. Каждый источник данных может иметь множество параметров с различными типами данных <tex>M_p</tex>. Структуру источника данных можно представить следующим образом: <tex>ds=\langle p_1, p_2, \dots, p_k \rangle</tex>; * '''Parameter template''' {{---}} шаблон параметра, хранимого в источнике данных; Чтобы реализовать такую модель хранения, создается предложение необходимо выполнить следующие действия:::1. '''Определение требуемой схемы данных:'''::Наблюдаемые объекты описываются набором гетерогенных данных. Схема данных для конкретного человека вступить хранения такого рода данных представлена в сообществосоответствии с форматом: <tex>sD=\langle gld, timestamp, (lat, lon), attrD \rangle</tex>, в котором:::* <tex>gld</tex> {{---}} глобальный идентификатор объекта (уникален);::* <tex>timestamp</tex> {{---}} его временная метка;::* <tex>(lat, прослушать новую композицию lon)</tex> {{---}} координаты его местоположения на временной отметке;::* <tex>attrD</tex> {{---}} словарь, описывающий функции объекта и тего значения.п::2.'''Описание источников данных и настроек сборщиков данных:'''::Высокоуровневое описание произвольных источников данных определяется форматом: <tex>sC=\langle sld, acs, (lat, lon), attrS \rangle</tex>, в котором:::* <tex>sld</tex> {{---}} уникальный идентификатор источника данных;::* Здравоохранение<tex>acs</tex> {{---}} список значений ключа для источника данных;::* <tex>attrS</tex> {{---}} внутренняя схема данных полученных от источника данных. Перебор симптомов болезней ::3. '''Построение схем привязки данных:'''::На этом этапе создается связь между исходной схемой источника данных и требуемой схемой. Эта ссылка представлена в виде набора <tex>R</tex>, содержащего пары атрибутов из набора <tex>attrD</tex> схемы <tex>sD</tex> и эффектов лекарственных препаратов позволяет создавать новые средства по борьбе с новыми заболеваниямиатрибутов из набора <tex>attrS</tex> в схеме <tex>sC</tex>::::<tex>R=\{r_{i,j}\}</tex>,:::<tex>r_{i,j}=\langle attrD_i, attrS_j \rangle</tex>. ::Здесь также следует помнить, что::::<tex>\exists r_{lon}:\langle lon^{(sC)}, lon^{sD} \rangle</tex>,:::<tex>\exists r_{lat}:\langle lat^{(sC)}, lat^{sD} \rangle</tex>.* Предупреждение природных катастроф::4. Одна '''Реализация алгоритмов преобразования данных:'''::В соответствии с настройками привязки <tex>R</tex> и алгоритмами <tex>\{\alpha_k\}_{k=1}^{||R||}</tex> реализовано преобразование данных из важнейших сферисходной схемы в желаемую::::<tex>\forall r_{i,j} \in R</tex>,:::<tex>\exists \alpha_{i,j}:v(attrD_i) \implies v^*(attrS_j)</tex>, где используются большие данные<tex>v</tex> {{---}} значение атрибута.::5. '''Разделение данных:'''::Схема <tex>DS</tex> для разделения потоков данных в микро-потоки::::<tex>DS_{\alpha_k}=\langle df, \alpha_k, \{mdf_l\}_{l=1}^{L_{\alpha_k}}</tex>. Алгоритмы :: Здесь <tex>df</tex> {{---}} исходный поток данных, <tex>mdf_l</tex> {{---}} <tex>l</tex>-й l поток данных в этой сфере ежедневно обрабатывают огромные памяти для определенного алгоритма <tex>\alpha_k</tex>, <tex>L_{\alpha_k}</tex> – количество потоков. Данные разбиваются на потоки данных , подлежащие обработке в распределенной архитектуре, в виде показаний датчиков соответствии с разных станций, чтобы приблизительно вычислить место и время предполагаемой катастрофыпредопределенными задачами.* Правоохранительные органы::6. Даже небольшое повышение преступности '''Вставка обработанных данных в каком-либо регионе будет отслежено базу данных:'''::Когда данные преобразуются в соответствии с помощью программопределенной схемой, изучающих статистику преступленийони вставляются в базу данных. Обработка больших массивов Это позволяет извлекать разнородные данные из базы данных машиной без дополнительных манипуляций с данными. Данная модель позволяет быстрее реагировать обрабатывать массивы данных различных по структуре за счёт их преобразования к нужному формату. В дальнейшем аналитическая модель, работающая с этими данными сможет делать более точные прогнозы и принимать соответствующие меры гипотезы, так как по предотвращению новых преступленийкаждому объекту будет значительно больше различной информации.* Сельское хозяйство=== Применение методов машинного обучения для построения "озера" данных === Представленная выше модель хорошо описывает схему хранения разнородных данных путём создания некоторого шаблона, который мог бы описывать все эти данные. Построение такого шаблона может быть очень трудоёмкой задачей, так как данных много и их форматов тоже может быть много. Возникает задача '''''метапрофилирования''''' данных. Этот процесс направлен на структуризацию разносортных данных и различных метаданных. Без этого большинство действий с данными будут попросту невозможны – будь то построение запросов для СУБД, очистка данных, их классификация и кластеризация. Фермерам доступны данные о погодеКроме того, состоянии почвыкогда объёмы данных слишком велики, влажностив БД может быть огромное количество таблиц, созревании плодовчьи метаданные могут сильно различаться. В таких условиях получение полной информации даже по одному объекту будет практически невыполнимой задачей. '''Мета-профайл''' (англ. ''metadata-profile'') {{---}} особая структура данных, ходе роста призванная собрать воедино различную информацию о конкретном объекте <tex>O</tex>. Сюда так же входят и условиях для скотаразличные представления этого объекта. Эта информация позволяет максимизировать Например, музыкальную композицию можно идентифицировать по-разному, от названия и автора до жанра и оптимизировать производство продукции под потребности рынка года создания: ::<tex>MP=(Name, Prop)</tex>* <tex>Name</tex> {{---}} уникальное имя мета-профайла, <tex>Name \in Namespace</tex>, где <tex>Namespace</tex> {{---}} все возможные имена объектов;* <tex>Prop</tex> {{---}} множество атрибутов мета-профайла <tex>\{p_1, \dots, p_n\} | \forall p_i \in Prop: i=\{1, \dots, n\}</tex>. <tex>p_i=(PName_i, PType_i, P_i)</tex>:** <tex>PName_i</tex> {{---}} уникальное имя атрибута, <tex>PName_i \in PNamespace</tex>, где <tex>PNamespace</tex> {{---}} все возможные имена атрибутов.** <tex>PType_i</tex> {{---}} простой тип данных, <tex>PType_i \in Plaintypes</tex>, где <tex>Plaintypes</tex> {{---}} все возможные типы данных. Важно, что типы являются простыми, то есть числами, символами или строками.** <tex>P_i : 0 < P_i < 1</tex> {{---}} вероятность принадлежности атрибута <tex>p_i</tex> некоторому случайно отобранному представлению <tex>O</tex>. Построение этой структуры можно произвести различными методами машинного обучения. Сюда входят [[Логистическая регрессия|логистическая регрессия]], [[Байесовская классификация|наивная байесовская классификация]], [[Глубокое обучение|глубокое обучение]]. Фактически, здесь стоит задача классификации, в реальном временикоторой мы должны понять, какие атрибуты относятся к описываемому объекту, а какие нет.
Однако внедрению Big Data мешает два фактораПредположим, что у нас имеется некоторая выборка данных из одного источника. В данной выборке для каждого объекта имеется лишь одно представление, достаточно полное для однозначной его идентификации. Для мелких Также имеется выборка данных, относящихся к объектам совсем другого типа, но имеющих похожие атрибуты, её размер должен быть примерно таким же, как и средних компаний – это долгий у предыдущей, чтобы убедиться в том, что данные для обучения сбалансированы. Это необходимо, чтобы отметать неверные варианты при обучении. Опираясь на эти выборки, происходит обучение на остальных данных (различные источники данных), представленных в виде векторов, содержащих в себе имена различных атрибутов объекта и дорогой процесс сбора данныхзначения этих атрибутов. А некоторая информация и вовсе относится На основе вероятностей, имен, типов атрибутов принимается решение, отнести их к персональной – ее сбор без согласия гражданина запрещенобъекту или нет. Таким образом, шаблон объекта обрастает новыми атрибутами, по которым его можно идентифицировать.
== Работа с комплексом Apache Spark для обучения на больших данных ==
 
=== Об инструментах Apache Spark ===
Многие компании на сегодняшний день уже столкнулись с необходимостью обработки больших массивов данных. Для этой цели они начали использовать проекты экосистемы [https://hadoop.apache.org/ Apache Hadoop]. Данная экосистема базируется на [https://ru.wikipedia.org/wiki/MapReduce#:~:text=MapReduce%20%E2%80%94%20%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C%20%D1%80%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D1%91%D0%BD%D0%BD%D1%8B%D1%85%20%D0%B2%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9%2C%20%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F,%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D0%B0%D0%BC%D0%B8%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%20%D0%B2%20%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85%20%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B0%D1%85. MapReduce], парадигме параллельного программирования, разработанного компанией Google.
Основные достоинства MapReduce:
* Масштабируемостьмасштабируемость;* Устойчивость устойчивость к сбоям;* Простота простота использования.
Но при всех достоинствах данного инструмента, наблюдалась низкая производительность на итеративных алгоритмах (например, алгоритмы машинного обучения). Решение проблемы было найдено в университете Беркли: была разработана модель распределенных вычислений, которая имеет устойчивость к сбоям при пользовании распределенной коллекцией данных (англ. resilient distributed dataset, RDD).
На основе RDD по сей день развивается система [https://spark.apache.org/ Apache Spark], которая обладает сравнительно высокой эффективностью при работе итеративных алгоритмов за счет кэширования результатов в памяти. На основе концепции распределенных коллекций разрабатываются распределенные системы:
* [https://spark.apache.org/docs/1.0.0/sql-programming-guide.html Shark] {{---}} хранилище данных.;* [https://spark.apache.org/docs/latest/graphx-programming-guide.html GraphX] {{---}} система обработки графовых данных.;* [https://spark.apache.org/docs/latest/streaming-programming-guide.html Spark Streaming] {{---}} система обработки потоковых данных.;* [https://spark.apache.org/docs/latest/ml-guide.html Spark MLlib] {{---}} библиотека алгоритмов машинного обучения.
Все из перечисленных систем совместимы со стеком технологий Hadoop.
MLlib {{---}} основная библиотека Spark. Она предоставляет множество служебных программ, полезных для задач машинного обучения:* Классификацияклассификация;* Регрессиярегрессия;* Кластеризациякластеризация;* Моделированиемоделирование;* Сингулярное сингулярное разложение и анализ по методу главных компонент;* Проверка проверка гипотез и статистической выборки.
=== Примеры реализации алгоритмов с использованием Spark MLlib ===Рассмотрим удобство использования Apache Spark на примере. Решим задачу “Hello world” из мира Big Data Задача нашей модели {{---}} подсчет слов в файлепредугадать: захочет ли клиент оформить срочный вклад. Для этого воспользуемся [https://www.kaggle.com/rouseguy/bankbalanced| данными из Machine Learning Repository]. Напишем нашу модель на Python. Для начала работы с Apache Spark его необходимо установить, выполнив sparkContext.textFile(<font color = "orange"hdfs>'''pip''' '''install'''</font> pysparkСчитаем данные из нашего файла и выведем информацию о датасете на экран: <font color = "orange">'''from'''</font> pyspark.sql <font color = "orange">'''import'''</font> SparkSession spark = SparkSession.builder.appName(<font color = "green">'ml-bank'</font>)."getOrCreate() df = spark.flatMapread.csv(line <font color ="green"> line'bank.split(csv'</font>, header = <font color = "blue">True</font>, inferSchema = <font color = " blue">True</font>) df.printSchema()Результат: root |-- age: integer (nullable = true) |-- job: string (nullable = true) |-- marital: string (nullable = true) |-- education: string (nullable = true) |-- default: string (nullable = true) |-- balance: integer (nullable = true) |-- housing: string (nullable = true) |-- loan: string (nullable = true) |-- contact: string (nullable = true) |-- day: integer (nullable = true) |-- month: string (nullable = true) .map |-- duration: integer (word nullable => true) |-- campaign: integer (word, 1nullable = true) |-- pdays: integer (nullable = true).reduceByKey |-- previous: integer (_ + _nullable = true) .saveAsTextFile |-- poutcome: string ("hdfsnullable = true) |-- deposit://..."string (nullable = true)Рассмотрим еще один пример анализа данных Как видно наши данные состоят из множества столбцов, содержащих числа и строки Для большей информации выведем наши данные с помощью Spark MLlib. Поставим задачу проанализировать наличие землетрясений на основе твитов. Отберем необходимые твиты с информацией о “тряске” или “землетрясении”таблицы pandas. Для примера выведем 7 первых значений: TwitterUtils.createStream(...)<font color = "orange">'''import'''</font> pandas <font color = "orange">'''as'''</font> pd pd.filterDataFrame(_df.getText.containstake(<font color = "earthquakeblue">7</font>) || _, columns=df.getTextcolumns).containstranspose("shaking"))Далее подготовим эти [[Файл:SparkMLFirstTable.png]] Нас будут интересовать только численные данные к построению модели. Разобьем выборку на обучающую и тестирующуюДля них построим таблицу с основной информацией (количество/ среднее по всей таблице/ среднеквадратичное отклонение / минимальное значение / максимальное значение): numeric_features = [t[<font color = "blue">0</font>] <font color = "orange">'''for'''</font> t <font color = "orange">'''in'''</font> df.dtypes <font color = "orange">'''if'''</font> t[<font color="blue">val1</font> data ] == MLUtils<font color = "green">'int'</font>] df.select(numeric_features).describe().loadLibSVMFiletoPandas(sc, "sample_earthquate_tweets).txt"transpose() [[Файл:SparkMLSecondTable.png]]
Оценим корреляцию между оставшимися данными: <font color="blueorange">'''from'''</font> pandas.plotting <font color = "orange">val'''import'''</font> splits scatter_matrix numeric_data = datadf.randomSplitselect(Arraynumeric_features).toPandas(0.6, 0.4) axs = scatter_matrix(numeric_data, seed figsize=(<font color = 11L) "blue">8</font>, <font color="blue">val8</font> training )) n = splitslen(0)numeric_data.cache(columns) <font color="blueorange">val'''for'''</font> test i <font color = splits"orange">'''in'''</font> range(1n): v = axs[i, <font color = "blue">0</font>]Проводим обучение нашей модели v.yaxis. В качестве алгоритма выберем метод опорных векторовlabel. set_rotation(<font color="blue">val0</font> numIterations ) v.yaxis.label.set_ha(<font color = 100"green">'right'</font>) v.set_yticks(()) h = axs[n-<font color="blue">val1</font> model , i] h.xaxis.label.set_rotation(<font color = SVMWithSGD"blue">90</font>) h.trainset_xticks((training, numIterations))
<font color="green">// Очищаем пороговое значение, заданное по умолчанию</font> model[[Файл:SparkMLThirdTable.clearThreshold()Выведем интересующий нас результат <font color="blue">val</font> metrics = new BinaryClassificationMetrics(scoreAndLabels) <font color="blue">val</font> auROC = metrics.areaUnderROC()png]]
На данных графиках можно увидеть зависимость, к примеру, между возрастом и балансом на карте. Не будем учитывать эти корреляции при построении наших моделей, однако избавимся от дня и месяца рождения, так как эти параметры не влияют на желание клиента оформить быстрый кредит. printlndf = df.select(<font color = "green">'age'</font>, <font color = "green">'job'</font>, <font color = "green"Area under ROC >'marital'</font>, <font color = " + auROCgreen">'education'</font>, <font color = "green">'default'</font>, <font color = "green">'balance'</font>, <font color = "green">'housing'</font>, <font color = "green">'loan'</font>, <font color = "green">'contact'</font>, <font color = "green">'duration'</font>, <font color = "green">'campaign'</font>, <font color = "green">'pdays'</font>, <font color = "green">'previous'</font>, <font color = "green">'poutcome'</font>, <font color = "green">'deposit'</font>) cols = df.columnsПодготовим оставшиеся данные для построения моделей.
Если результат нас устраивает можем дополнить наш код отправкой сообщений о землетрясении пользователям с помощью Spark SQL и пользовательской функции sendEMail <font color = "orange">'''from'''</font> pyspark.ml.feature <font color = "orange">'''import'''</font> StringIndexer, VectorAssembler, OneHotEncoder categoricalColumns = [<font color = "green">'job'</font>, <font color = "green">'marital'</font>, <font color = "green">'education'</font>, <font color = "green">'default'</font>, <font color = "green">'housing'</font>, <font color = "green">'loan'</font>, <font color = "green">'contact'</font>, <font color = "green">'poutcome'</font>] stages = [] <font color = "orange">'''for'''</font> categoricalCol <font color = "orange">'''in'''</font> categoricalColumns: stringIndexer = StringIndexer(inputCol = categoricalCol, outputCol = categoricalCol + <font color = "green">'Index'</font>) encoder = OneHotEncoder(inputCols=[stringIndexer.getOutputCol()], outputCols=[categoricalCol + <font color = "green">"classVec"</font>]) stages += [stringIndexer, encoder] label_stringIdx = StringIndexer(inputCol = <font color = "green">'deposit'</font>, outputCol = <font color = "green">'label'</font>) stages += [label_stringIdx] numericCols = [<font color = "green">'age'</font>, <font color = "green">'balance'</font>, <font color = "green">'duration'</font>, <font color = "green">'campaign'</font>, <font color = "green">'pdays'</font>, <font color = "green">'previous'</font>] assemblerInputs = [c + <font color = "green">"classVec"</font> <font color = "orange">'''for'''</font> c <font color = "orange">'''in'''</font> categoricalColumns] + numericCols assembler = VectorAssembler(inputCols=assemblerInputs, outputCol=<font color = "green">"features"</font>) stages += [assembler] <font color="blueorange">'''from'''</font> pyspark.ml <font color = "orange">val'''import'''</font> sqlContext Pipeline pipeline = Pipeline(stages = new orgstages) pipelineModel = pipeline.apachefit(df) df = pipelineModel.sparktransform(df) selectedCols = [<font color = "green">'label'</font>, <font color = "green">'features'</font>] + cols df = df.sqlselect(selectedCols) df.hiveprintSchema()Наконец, поделим нашу выборку на обучающую и тестирующую train, test = df.HiveContextrandomSplit(sc[<font color = "blue">0.7</font>, <font color = "blue">0.3</font>], seed = <font color = "blue">2018</font>)Построим модели и выведем точность для:
sqlContext.sql("FROM earthquake_warning_users SELECT firstName, lastName, city, email") .collect().foreach(sendEmail())Logistic Regression
Еще одной интересной особенностью Spark MLlib является возможность кастомизировать выбранные алгоритмы <font color = "orange">'''from'''</font> pyspark. К примеруml.classification <font color = "orange">'''import'''</font> LogisticRegression lr = LogisticRegression(featuresCol = <font color = "green">'features'</font>, можно увеличить число итераций или изменить параметр регуляризации labelCol = <font color = "green">'label'</font>, maxIter=<font color = "blue">10</font>) lrModel = lr.fit(train) trainingSummary = lrModel.summary print(<font color = "green">"Точность: "</font> + str(trainingSummary.areaUnderROC))
Точность: 0.8865478305561797Binary Classification <font color="orange">'''from'''</font> pyspark.ml.evaluation <font color = "orange">'''import'''</font> orgBinaryClassificationEvaluator evaluator = BinaryClassificationEvaluator() print(<font color = "green">"Точность: "</font>, evaluator.apacheevaluate(predictions))  Точность: 0.spark8837112925002687Decision Tree <font color = "orange">'''from'''</font> pyspark.mllibml.optimization.L1Updaterclassification <font color = "orange">'''import'''</font> DecisionTreeClassifier dt = DecisionTreeClassifier(featuresCol = <font color = "green">'features'</font>, labelCol = <font color = "green">'label'</font>, maxDepth = <font color="blue">val3</font> svmAlg ) dtModel = new SVMWithSGDdt.fit(train) svmAlgpredictions = dtModel.optimizertransform(test) evaluator = BinaryClassificationEvaluator() print(<font color = "green">"Точность: "</font> + str(evaluator.evaluate(predictions, {evaluator.metricName: <font color = "green">"areaUnderROC"</font>})))  Точность: 0.7808118726917547 Random Forest  <font color = "orange">'''from'''</font> pyspark.ml.classification <font color = "orange">'''import'''</font> RandomForestClassifier rf = RandomForestClassifier(featuresCol = <font color = "green">'features'</font>, labelCol = "green">'label'</font>) setNumIterations rfModel = rf.fit(200train) predictions = rfModel.transform(test) evaluator = BinaryClassificationEvaluator() setRegParam print(<font color = "green">"Точность: "</font> + str(evaluator.evaluate(predictions, {evaluator.metricName: <font color = "green">"areaUnderROC"</font>})))  Точность: 0.18777131493473223Gradient-Boosted Tree <font color = "orange">'''from'''</font> pyspark.ml.classification <font color = "orange">'''import'''</font> GBTClassifier gbt = GBTClassifier(maxIter=<font color = "blue">10</font>) gbtModel = gbt.fit(train) predictions = gbtModel.transform(test) setUpdater evaluator = BinaryClassificationEvaluator(new L1Updater) print(<font color="bluegreen">val"Точность: "</font> modelL1 = svmAlg+ str(evaluator.runevaluate(trainingpredictions, {evaluator.metricName: <font color = "green">"areaUnderROC"</font>})) Точность: 0.8935091626908479 == Практическое применение Big Data ==На сегодняшний день работа с большими данными популярна во многих рабочих сферах. Как правило, бизнес-приложения обрабатывают огромные потоки данных из различных источников, после чего создается предсказание следующего предполагаемого события. Программисты бизнес-приложений получают в два раза больше программистов других приложений. А программист бизнес-приложений, умеющий работать с большими данными по методологии SCRUM, получает ещё больше.Можно выделить несколько областей, где использование больших данных набирает популярность:* Бизнес и Маркетинг. С помощью анализа последних произведенных транзакций алгоритмы с достаточно высокой точностью могут предсказать повышение спроса на определенный товар;* Социальные сети. У некоторых соцсетей уже есть встроенные алгоритмы анализа истории активности пользователей. Исходя из предпочтений пользователя и популярности некоторых сообществ, которые приближены к его интересам, создается предложение для конкретного человека вступить в сообщество, прослушать новую композицию;* Здравоохранение. Перебор симптомов болезней и эффектов лекарственных препаратов позволяет создавать новые средства по борьбе с новыми заболеваниями;* Предупреждение природных катастроф. Одна из важнейших сфер, где используются большие данные. Алгоритмы в этой сфере ежедневно обрабатывают огромные потоки данных в виде показаний датчиков с разных станций, чтобы приблизительно вычислить место и время предполагаемой катастрофы;* Правоохранительные органы. Даже небольшое повышение преступности в каком-либо регионе будет отслежено с помощью программ, изучающих статистику преступлений. Обработка больших массивов данных машиной позволяет быстрее реагировать и принимать соответствующие меры по предотвращению новых преступлений;* Сельское хозяйство. Фермерам доступны данные о погоде, состоянии почвы, влажности, созревании плодов, ходе роста и условиях для скота. Эта информация позволяет максимизировать и оптимизировать производство продукции под потребности рынка в реальном времени. Однако внедрению Big Data мешает два фактора. Для мелких и средних компаний – это долгий и дорогой процесс сбора данных. А некоторая информация и вовсе относится к персональной – ее сбор без согласия гражданина запрещен.
== См. также ==
* [http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%89%D0%B8%D0%B5_%D0%BF%D0%BE%D0%BD%D1%8F%D1%82%D0%B8%D1%8F Машинное обучение[Общие понятия]]* [http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B0%D1%80%D0%B8%D0%B0%D1%86%D0%B8%D0%B8_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D0%B8 Регрессионный анализ[Вариации регрессии]]* [http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D1%80%D0%B5%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%BC_%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B8 [Обучение в реальном времени]]* [http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F [Кластеризация]]* [[Автоматическое машинное обучение]] == Примечания == <references/>
== Источники информации ==
* [https://ru.wikipedia.org/wiki/%D0%91%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5 Wikipedia {{---}} Большие данные]
* [https://habr.com/ru/company/habr_career/blog/456746/ Блог компании Хабр Карьера {{---}} Большие данные — большая ответственность, большой стресс и большие деньги]
* [https://habr.com/ru/company/productstar/blog/503580/ Блог компании ProductStar {{---}} Что такое «Big Data»?]
* [https://databricks.com/spark/about О системе Apache Spark]
* [https://docs.microsoft.com/ru-ru/azure/hdinsight/spark/apache-spark-creating-ml-pipelines Документация от Microsoft {{---}} Создание конвейера машинного обучения Apache Spark]
* [https://www.researchgate.net/publication/322994594_A_survey_of_different_search_techniques_for_big_data A survey of different search techniques for big data] {{---}} 4th International Conference on Innovations in Information, Embedded and Communication Systems, 2017;* [http://www.vstu.ru/upload/iblock/ed2/ed26c52e2ff99fb5b39fbaf37717a96c.pdf Методы обработки разнородных данных в проактивных системах управления транспортной инфраструктурой] {{---}} Чан Ван Фу, Волгоградский государственный технический университет, 2019г;* [https://www.researchgate.net/profile/Michael_Gubanov/publication/346275767_WebLens_Towards_Interactive_Large-scale_Structured_Data_Profiling/links/5fc0055c299bf104cf7fd4a1/WebLens-Towards-Interactive-Large-scale-Structured-Data-Profiling.pdf Towards Interactive Large-scale Structured Data Profiling] {{---}} Rituparna Khan, Michael Gubanov {{---}} Department of Computer Science, Florida State University, 2020г.
[[Категория: Машинное обучение]]
[[Категория: Большие данные]]
1632
правки

Навигация