Обучение на больших данных — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Примеры реализации алгоритмов с использованием Spark MLlib)
(Примеры реализации алгоритмов с использованием Spark MLlib)
Строка 100: Строка 100:
 
  <font color="blue">val</font> test = splits(1)
 
  <font color="blue">val</font> test = splits(1)
 
Проводим обучение нашей модели. В качестве алгоритма выберем метод опорных векторов.
 
Проводим обучение нашей модели. В качестве алгоритма выберем метод опорных векторов.
  val numIterations = 100
+
  <font color="blue">val</font> numIterations = 100
  val model = SVMWithSGD.train(training, numIterations)
+
  <font color="blue">val</font> model = SVMWithSGD.train(training, numIterations)
  
 
  <font color="green">// Очищаем пороговое значение, заданное по умолчанию</font>
 
  <font color="green">// Очищаем пороговое значение, заданное по умолчанию</font>

Версия 21:26, 17 января 2021

Эта статья находится в разработке!

Обучение на больших данных — раздел машинного обучения, специализирующийся на построении моделей, обрабатывающих большие объёмы данных, т. н. "big data" или "большие данные".


Терминология и история

Сам термин "большие данные" - часто трактуется очень неоднозначно, т. к. в ходе истории компьютерной техники объём данных и носителей этих данных возрастал в геометрической прогрессии. 50 лет назад жёсткий диск на 5 мегабайт нельзя было поднять без помощи автопогрузчика. В наши же дни маленькая коробочка весом в полкило может вмещать до нескольких терабайт данных (а то и десятков терабайт), а данные, хранящиеся на различных серверах можно исчислять петабайтами. Поэтому вопрос, какие же данные считать большими, довольно запутанный.

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

Признаки больших данных. Правило VVV

Чтобы массив информации обозначить приставкой «big» он должен обладать следующими признаками:

  • Volume (Объем) – данные измеряются по физической величине и занимаемому пространству на цифровом носителе. К «big» относят массивы свыше 150 Гб в сутки.
  • Velocity (Скорость, обновление) – информация регулярно обновляется и для обработки в реальном времени необходимы интеллектуальные технологии больших данных.
  • Variety (Разнообразие) – информация в массивах может иметь неоднородные форматы, быть структурированной частично, полностью и скапливаться бессистемно. Например, социальные сети используют большие данные в виде текстов, видео, аудио, финансовых транзакций, картинок и прочего.

В современных системах рассматриваются два дополнительных фактора:

  • Variability (Изменчивость) – потоки данных могут иметь пики и спады, сезонности, периодичность. Всплески неструктурированной информации сложны в управлении, требует мощных технологий обработки.
  • Value (Значение данных) – информация может иметь разную сложность для восприятия и переработки, что затрудняет работу интеллектуальным системам. Например, массив сообщений из соцсетей – это один уровень данных, а транзакционные операции – другой. Задача машин определить степень важности поступающей информации, чтобы быстро структурировать.

Особенности и трудности работы с большими данными

При работе с большими данными важно помнить некоторые их особенности:

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

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

Порядок работы с большими данными

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

1. Чистка данных (data cleaning) – поиск и исправление ошибок в первичном наборе информации, например, ошибки ручного ввода (опечатки), некорректные значения с измерительных приборов из-за кратковременных сбоев и т.д.;

2. Генерация предикторов (feature engineering) – переменных для построения аналитических моделей;

3. Построение и обучение аналитической модели (model selection) для предсказания целевой (таргетной) переменной. Так проверяются гипотезы о зависимости таргетной переменной от предикторов;

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

Методы обработки больших данных

К основным методам сбора и анализа больших данных относят следующие:

  • Data Mining – обучение ассоциативным правилам, классификация, кластерный и регрессионный анализ;
  • краудсорсинг — категоризация и обогащение данных народными силами, т.е. с добровольной помощью сторонних лиц;
  • смешение и интеграция разнородных данных, таких как, цифровая обработка сигналов и обработка естественного языка;
  • машинное обучение, включая искусственные нейронные сети, сетевой анализ, методы оптимизации и генетические алгоритмы;
  • распознавание образов;
  • прогнозная аналитика;
  • имитационное моделирование;
  • пространственный и статистический анализ;
  • визуализация аналитических данных — рисунки, графики, диаграммы, таблицы.

Практическое применение Big Data

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

  • Бизнес и Маркетинг. С помощью анализа последних произведенных транзакций алгоритмы с достаточно высокой точностью могут предсказать повышение спроса на определенный товар.
  • Социальные сети. У некоторых соцсетей уже есть встроенные алгоритмы анализа истории активности пользователей. Исходя из предпочтений пользователя и популярности некоторых сообществ, которые приближены к его интересам, создается предложение для конкретного человека вступить в сообщество, прослушать новую композицию и т.п.
  • Здравоохранение. Перебор симптомов болезней и эффектов лекарственных препаратов позволяет создавать новые средства по борьбе с новыми заболеваниями.
  • Предупреждение природных катастроф. Одна из важнейших сфер, где используются большие данные. Алгоритмы в этой сфере ежедневно обрабатывают огромные потоки данных в виде показаний датчиков с разных станций, чтобы приблизительно вычислить место и время предполагаемой катастрофы.
  • Правоохранительные органы. Даже небольшое повышение преступности в каком-либо регионе будет отслежено с помощью программ, изучающих статистику преступлений. Обработка больших массивов данных машиной позволяет быстрее реагировать и принимать соответствующие меры по предотвращению новых преступлений.
  • Сельское хозяйство. Фермерам доступны данные о погоде, состоянии почвы, влажности, созревании плодов, ходе роста и условиях для скота. Эта информация позволяет максимизировать и оптимизировать производство продукции под потребности рынка в реальном времени.

Однако внедрению Big Data мешает два фактора. Для мелких и средних компаний – это долгий и дорогой процесс сбора данных. А некоторая информация и вовсе относится к персональной – ее сбор без согласия гражданина запрещен.

Работа с комплексом Apache Spark для обучения на больших данных

Многие компании на сегодняшний день уже столкнулись с необходимостью обработки больших массивов данных. Для этой цели они начали использовать проекты экосистемы Apache Hadoop. Данная экосистема базируется на MapReduce, парадигме параллельного программирования, разработанного компанией Google. Основные достоинства MapReduce:

  • Масштабируемость
  • Устойчивость к сбоям
  • Простота использования

Но при всех достоинствах данного инструмента, наблюдалась низкая производительность на итеративных алгоритмах (например, алгоритмы машинного обучения). Решение проблемы было найдено в университете Беркли: была разработана модель распределенных вычислений, которая имеет устойчивость к сбоям при пользовании распределенной коллекцией данных, RDD. На основе RDD по сей день развивается система Apache Spark, которая обладает сравнительно высокой эффективностью при работе итеративных алгоритмов за счет кэширования результатов в памяти. На основе концепции распределенных коллекций разрабатываются распределенные системы:

  • Shark – хранилище данных.
  • GraphX – система обработки графовых данных.
  • Spark Streaming – система обработки потоковых данных.
  • Spark MLlib – библиотека алгоритмов машинного обучения.

Все из перечисленных систем совместимы со стеком технологий Hadoop. MLlib – основная библиотека Spark. Она предоставляет множество служебных программ, полезных для задач машинного обучения:

  • Классификация
  • Регрессия
  • Кластеризация
  • Моделирование
  • Сингулярное разложение и анализ по методу главных компонент
  • Проверка гипотез и статистической выборки

Примеры реализации алгоритмов с использованием Spark MLlib

Рассмотрим удобство использования Apache Spark на примере. Решим задачу “Hello world” из мира Big Data - подсчет слов в файле.

sparkContext.textFile("hdfs://...")
           .flatMap(line => line.split(" "))
           .map(word => (word, 1)).reduceByKey(_ + _)
           .saveAsTextFile("hdfs://...")

Рассмотрим еще один пример анализа данных с помощью Spark MLlib. Поставим задачу проанализировать наличие землетрясений на основе твитов. Отберем необходимые твиты с информацией о “тряске” или “землетрясении”.

TwitterUtils.createStream(...)
           .filter(_.getText.contains("earthquake") || _.getText.contains("shaking"))

Далее подготовим эти данные к построению модели. Разобьем выборку на обучающую и тестирующую

val data = MLUtils.loadLibSVMFile(sc, "sample_earthquate_tweets.txt")
val splits = data.randomSplit(Array(0.6, 0.4), seed = 11L)
val training = splits(0).cache()
val test = splits(1)

Проводим обучение нашей модели. В качестве алгоритма выберем метод опорных векторов.

val numIterations = 100
val model = SVMWithSGD.train(training, numIterations)
// Очищаем пороговое значение, заданное по умолчанию
model.clearThreshold()

Выведем интересующий нас результат

val metrics = new BinaryClassificationMetrics(scoreAndLabels)
val auROC = metrics.areaUnderROC()
println("Area under ROC = " + auROC)

Если результат нас устраивает можем дополнить наш код отправкой сообщений о землетрясении пользователям с помощью Spark SQL и пользовательской функции sendEMail()

val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
sqlContext.sql("FROM earthquake_warning_users SELECT firstName, lastName, city, email")
         .collect().foreach(sendEmail())

Еще одной интересной особенностью Spark MLlib является возможность кастомизировать выбранные алгоритмы. К примеру, можно увеличить число итераций или изменить параметр регуляризации

import org.apache.spark.mllib.optimization.L1Updater
val svmAlg = new SVMWithSGD()
svmAlg.optimizer.
  setNumIterations(200).
  setRegParam(0.1).
  setUpdater(new L1Updater)
val modelL1 = svmAlg.run(training)

См. также

Источники информации