Машинное обучение (англ Machine Learning) — обширный подраздел искусственного интеллекта, математическая дисциплина, использующая разделы математической статистики, численных методов оптимизации, теории вероятностей, дискретного анализа, и извл

Рейтинг: 13
Создана: 5 лет назад
Владелец: root

Machine Learning/Data Mining/Big Data

Основная информация

Машинное обучение (англ Machine Learning) — обширный подраздел искусственного интеллекта, математическая дисциплина, использующая разделы математической статистики, численных методов оптимизации, теории вероятностей, дискретного анализа, и извлекающая знания из данных.

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

Стена группы

Загрузка...
4 года назад
#
Собираем базу людей из открытых данных WhatsApp и VK
Data Mining
кадр из фильма Миссия Невыполнима II

Эта история началась пару месяцев назад, в первый день рождения моего сына. На мой телефон пришло СМС-сообщение с поздравлением и пожеланиями от неизвестного номера. Думаю, если бы это был мой день рождения мне бы хватило наглости отправить в ответ, не совсем культурное, по моему мнению, «Спасибо, а Вы кто?». Однако день рождения не мой, а узнать кто передаёт поздравления было интересно.

Первый успех

Было решено попробовать следующий вариант:
  • Добавить неизвестный номер в адресную книгу телефона;

  • Зайти по очереди в приложения, привязанные к номеру (Viber, WhatsApp);

  • Открыть новый чат с вновь созданным контактом и по фотографии определить отправителя.


Мне повезло и в моём случае в списке контактов Viber рядом с вновь созданным контактом появилась миниатюра фотографии, по которой я, не открывая её целиком, распознал отправителя и удовлетворенный проведенным «расследованием» написал смс с благодарностью за поздравления.

Сразу же за секундным промежутком эйфории от удачного поиска в голове появилась идея перебором по списку номеров мобильных операторов составить базу [номер_телефона => фото]. А еще через секунду идея пропустить эти фотографии через систему распознавания лиц и связать с другими открытыми данными, например, фотографиями из социальных сетей.

Естественно на пункте 3 (по фотографии определить отправителя) нас может настигнуть неудача и у этой неудачи есть 6 вариантов:
  • Номер не привязан к WhatsApp или Viber

  • Пользователь есть, но он не устанавливал себе Фото профиля

  • Фото установлено, но настроены параметры «приватности» или «конфиденциальности» («Показывать фото только моим контактам», а Вас в этом списке нет)

  • Вам доступно фото, но на нём изображён кот

  • На фото человек, но черт лица и/или особенностей телосложения не разобрать (отсутствие резкости, маленькое разрешение, затемнённые очки, шляпы, кепки, грим)

  • На фотографии владелец номера; анфас; высокая четкость, но вспомнить этого человека вы не можете


Четвертый пункт (на фото кот) имеет множество вариантов: это и фотографии знаменитостей, и персонажи мультфильмов, и фотографии еды, автомобилей, оружия и пр.

Подробнее
4 года назад
#
Иерархическая классификация сайтов на Python

Привет, Хабр! Как упоминалось в прошлой статье, немаловажной частью нашей работы является сегментация пользователей. Как же мы это делаем? Наша система видит пользователей как уникальные идентификаторы cookies, которые им присваиваем мы или наши поставщики данных. Выглядит этот id, например, так:

42bcfae8-2ecc-438f-9e0b-841575de7479

Эти номера выступают ключами в различных таблицах, но первоначальным value является, в первую очередь, URL страниц, на которых данная кука была загружена, поисковые запросы, а также иногда некоторая дополнительная информация, которую даёт поставщик – IP-адрес, timestamp, информация о клиенте и прочее. Эти данные довольно неоднородные, поэтому наибольшую ценность для сегментации представляет именно URL. Создавая новый сегмент, аналитик указывает некоторый список адресов, и если какая-то кука засветится на одной из этих страничек, то она попадает в соответствующий сегмент. Получается, что чуть ли не 90% рабочего времени таких аналитиков уходит на то, чтобы подобрать подходящий набор урлов – в результате кропотливой работы с поисковиками, Yandex.Wordstat и другими инструментами.

DCA

Подробнее
4 года назад
#
Лекция Дмитрия Ветрова о математике больших данных: тензоры, нейросети, байесовский вывод

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

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



Люди и их устройства стали генерировать такое количество данных, что за их ростом не успевают даже вычислительные мощности крупных компаний. И хотя без таких ресурсов работа с данными невозможна, полезными их делают люди. Сейчас мы находимся на этапе, когда информации так много, что традиционные математические методы и модели в становятся неприменимы. Из лекции Дмитрия Петровича вы узнаете, почему вам надо хорошо знать математику для работы с машинным обучением и обработкой данных. И какая «новая математика» понадобится вам для этого.

Дмитрий Ветров окончил ВМиК МГУ, кандидат физико-математчиеских наук. Автор более 120 научных публикаций. Дмитрий Петрович разработал курсы «Байесовские методы машинного обучения» и «Графические модели», которые читает в МГУ и в Школе анализа данных Яндекса. Принимал участие в нескольких междисциплинарных исследовательских проектах по разработке новых методов машинного обучения и вероятностного вывода (когнитивные ануки, медицина, неорганическая химия, и др.). Руководит исследовательской группой байесовских методов.

Подробнее
4 года назад
#
Потоковая обработка данных при помощи Akka

Привет, Хабр! Все привыкли ассоциировать обработку больших данных с Hadoop (или Spark), которые реализуют парадигму MapReduce (или его расширения). В этой статье я расскажу о недостатках MapReduce, о том, почему мы приняли решение отказываться от MapReduce, и как мы приспособили Akka + Akka Cluster на замену MapReduce.

Akka

Data Management Platform

Задача, для решения которой нам понадобились инструменты работы с большими данными, – сегментация пользователей. Класс систем, которые решают задачу сегментации пользователей во всём мире принято называть Data Management Platform или сокращённо DMP. На вход DMP поступают данные о действиях пользователей (в первую очередь, это факты посещений тех или иных страниц в интернете), на выходе DMP выдает «профиль пользователя» — его пол, возраст, интересы, намерения и так далее. Этот профиль в дальнейшем используется для таргетирования рекламы, персональных рекомендаций и для персонализации контента в целом. Продробнее о DMP можно почитать тут: http://digitalmarketing-glossary.com/What-is-DMP-definition.

Поскольку DMP работает с данными большого количества пользователей, объёмы данных, которые нужно обрабатывать, могут достигать очень внушительных размеров. Например, наша DMP Facetz.DCA обрабатывает данные 600 миллионов браузеров, ежедневно обрабатывая почти полпетабайта данных.

Подробнее
4 года назад
#
Внезапный диван леопардовой расцветки

Если вы интересуетесь искусственным интеллектом и прочим распознаванием, то наверняка уже видели эту картинку:

ImageNet-2010
А если не видели, то это результаты Хинтона и Крижевского по классификации ImageNet-2010 глубокой сверточной сетью

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

Это вообще довольно любопытный результат, если задуматься. Потому что… скажем, вы знаете, как отличить одного большого пятнистого котика от другого большого пятнистого котика? Я, например, нет. Наверняка есть какие-то зоологические, достаточно тонкие различия, типа общей стройности/массивности и пропорций тела, но мы же все-таки говорим о компьютерном алгоритме, которые до сих пор допускают какие-то вот такие достаточно глупые с человеческой точки зрения ошибки. Как он это делает, черт возьми? Может, тут что-то связанное с контекстом и фоном (леопарда вероятнее обнаружить на дереве или в кустах, а гепарда в саванне)? В общем, когда я впервые задумался над конкретно этим результатом, мне показалось, что это очень круто и мощно, разумные машины где-то за углом и поджидают нас, да здравствует deep learning и все такое.

Так вот, на самом деле все совершенно не так.

Подробнее
4 года назад
#
Машинная синестезия: аудиоанализ с использованием алгоритмов обработки изображений

Машинная синестезия

Если вы хотите просто взглянуть на код Python, проследуйте в репозиторий на GitHub.

Для подготовки материалов использован IPython Notebook. Вы можете скачать его по ссылке.

Аудиоанализ с использованием алгоритмов обработки изображений

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

Для исследования этого вопроса я решил воспользоваться методом сопоставления шаблонов и изображений для определения аудио. Классические алгоритмы принимают на входе изображение и шаблон, а возвращают степень подобия шаблона любому участку изображения. Моей задачей было определить аудиозапись в базе данных, частью которой является аудиосэмпл, используя масочный метод сравнения (Это то, что делают Shazam или SoundCloud).

Предварительная обработка данных

Аудиоданные представляются в виде одномерного массива дискретных отсчетов, равномерно распределённых во времени. Одноканальные изображения, обычно, хранятся и обрабатываются как двумерные массивы, поэтому мне нужно было как-то представить аудиозапись в двух измерениях. Самый примитивный способ – это просто переформатировать одномерный массив в двумерный.

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

IPython Notebook

Подробнее
4 года назад
#
Анализ данных на Scala. Считаем корреляцию 21-го века

Spark

Очень важно выбрать правильный инструмент для анализа данных. На форумах Kaggle.com, где проводятся международные соревнования по Data Science, часто спрашивают, какой инструмент лучше. Первые строчки популярноcти занимают R и Python. В статье мы расскажем про альтернативный стек технологий анализа данных, сделанный на основе языка программирования Scala и платформы распределенных вычислений Spark.

Как мы пришли к этому? В Retail Rocket мы много занимаемся машинным обучением на очень больших массивах данных. Раньше для разработки прототипов мы использовали связку IPython + Pyhs2 (hive драйвер для Python) + Pandas + Sklearn. В конце лета 2014 года приняли принципиальное решение перейти на Spark, так как эксперименты показали, что мы получим 3-4 кратное повышение производительности на том же парке серверов.

Еще один плюс — мы можем использовать один язык программирования для моделирования и кода, который будет работать на боевых серверах. Для нас это было большим преимуществом, так как до этого мы использовали 4 языка одновременно: Hive, Pig, Java, Python, для небольшой команды это серьезная проблема.

Spark хорошо поддерживает работу с Python/Scala/Java через API. Мы решили выбрать Scala, так как именно на нем написан Spark, то есть можно анализировать его исходный код и при необходимости исправлять ошибки, плюс — это JVM, на котором крутится весь Hadoop. Анализ форумов по языкам программирования под Spark свел к следующему:

Scala:
+ функциональный;
+ родной для Spark;
+ работает на JVM, а значит родной для Hadoop;
+ строгая статическая типизация;
— довольно сложный вход, но код читабельный.

Python:
+ популярный;
+ простой;
— динамическая типизация;
— производительность хуже, чем у Scala.

Java:
+ популярность;
+ родной для Hadoop;
— слишком много кода.

Подробнее
4 года назад
#
Использование машинного обучения и цепи Маркова в создании музыки

Markov Composer

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

Markov Composer

Подробнее
4 года назад
#
Определяем веса шахматных фигур регрессионным анализом

Шахматы

В этой статье речь пойдёт о небольшом программистском этюде на тему машинного обучения. Замысел его возник у меня при прохождении известного здесь многим курса «Machine Learning», читаемого Andrew Ng на Курсере. После знакомства с методами, о которых рассказывалось на лекциях, захотелось применить их к какой-нибудь реальной задаче. Долго искать тему не пришлось — в качестве предметной области просто напрашивалась оптимизация собственного шахматного движка.

Вступление: о шахматных программах

Шахматы

Не будем детально углубляться в архитектуру шахматных программ — это могло бы стать темой отдельной публикации или даже их серии. Рассмотрим только самые базовые принципы. Основными компонентами практически любого небелкового шахматиста являются поиск и оценка позиции.

Подробнее
4 года назад
#
Классификация предложений с помощью нейронных сетей без предварительной обработки

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

Сегодня я хочу поговорить о проблеме классификации отдельных предложений. Решение этой задачи позволяет делать много интересного, например, выделять положительные и отрицательные моменты из длинных текстов, определять тональность твитов, является компонентом многих систем отвечающих на естественно-языковые вопросы (классификация типа вопроса), помогает сегментировать веб-страницы на смысловые блоки и многое другое. Однако, классификация отдельных предложений значительно сложнее классификации больших блоков текста — в одном предложении значительно меньше полезных признаков, и велико влияние порядка слов. Например: «как положено фильму ужасов, этот фильм был ну очень жутким» — содержит негативные слова («ужас», «жуткий»), но выражает положительное мнение о фильме, «все было ужасно красиво», или даже «отличный фильм, ничего не скажешь, только зря деньги потратили».

Традиционно это затруднение стараются решать с помощью предварительной обработки текста и ручного выделения признаков. В предварительную обработку могут входить как относительно простые техники (учет отрицания путем приклеивания частицы «не» к следующим словам), там и более сложные наборы правил переключения тональности, а также построение дерева зависимостей, а в ручные признаки — словари положительных и отрицательных слов, место слова в предложении, и другие — насколько хватит фантазии. Ясно, что сей процесс нудный, требующий много сторонних функций (например, нужен парсер для грамматического разбора предложения, словари), и не всегда результативный. Например, если авторы предложений делали много грамматических ошибок, то парсер, строящий дерево зависимостей, начинает сильно путаться, и качество работы всей системы резко снижается.

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

Читать далее
4 года назад
#
Машинное обучение — 4: Скользящее среднее

Принято считать, что две базовые операции «машинного обучения» — это регрессия и классификация. Регрессия — это не только инструмент для выявления параметров зависимости y(x) между рядами данных x и y (чему я уже посвятил несколько статей), но и частный случай техники их сглаживания. В этом примере мы пойдем чуть дальше и рассмотрим, как можно проводить сглаживание, когда вид зависимости y(x) заранее неизвестен, а также, как можно отфильтровать данные, которые контролируются разными эффектами с существенно разными временными характеристиками.

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

Mathcad Express Prime

Приведенный график демонстрирует биржевое значение курса доллара к рублю с интервалом в 1 час. Исходные данные представлены синей кривой, а сглаженные — красной. Даже невооруженным глазом видно, что колебания курса имеют несколько характерных частот, что и является предметом одного из направлений технического анализа рынков.

Читать далее
4 года назад
#
Машинное обучение — 3. Пуассоновский случайный процесс: просмотры и клики

В предыдущих статьях, посвященных вероятностному описанию конверсии сайта, мы рассматривали число событий (просмотров и кликов), как выборку случайной величины, без зависимости от времени. Теперь пришло время сделать следующий шаг и ввести ее в рассмотрение.

Случайные процессы

Случайный процесс f(t) – это, немного упрощая, случайная величина, зависящая от времени. Множество значений f(t) для некоторого промежутка времени T называют реализацией или выборкой случайного процесса. Например, количество просмотров страницы сайта за сутки – это пример дискретного случайного процесса (или случайной последовательности), для него и аргумент (время), и область значений, т.е. возможные значения f(t) – дискретные величины. Соответственно, выборкой случайного процесса будет вектор f(ti). Пример двух выборок случайных процессов приведены на графике (расчеты, как и все в моем блоге, подготовлены при помощи Mathcad Express и их вы можете взять здесь).

Mathcad Express Prime

Читать далее
4 года назад
#
Машинное обучение — 2. Нелинейная регрессия и численная оптимизация

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

Когда известно, что случайная величина y зависит от чего-то (например, от времени или от другой случайной величины x) линейно, т.е. по закону y(x)= Ax+b, то применяется линейная регрессия (так в прошлой статье мы строили зависимость числа регистраций от числа просмотров). Для линейной регрессии коэффициенты A и b вычисляются по известным формулам. В случае регрессии другого вида, например, экспоненциальной, для того чтобы определить неизвестные параметры, необходимо решить соответствующую оптимизационную задачу: а именно, в рамках метода наименьших квадратов (МНК) задачу нахождения минимума суммы квадратов (y(xi) — yi)2.

Итак, вот данные, которые будем использовать в качестве примера. Пики посещаемости (ряд Views, красный пунктир) приходятся на моменты выхода статей. Второй ряд данных (Regs, с множителем 100) показывает число читателей, выполнивших после прочтения определенное действие (регистрацию и скачивание Mathcad Express – с его помощью, к слову, вы сможете повторить все расчеты этой и предыдущих статей). Все картинки — это скриншоты Mathcad Express, а файл с расчетами вы можете взять здесь.

Mathcad Express

Читать далее
4 года назад
#
Машинное обучение — 1. Корреляция и регрессия. Пример: конверсия посетителей сайта

Как и обещал, начинаю цикл статей по «машинному обучению». Эта будет посвящена таким понятиям из статистики, как корреляция случайных величин и линейная регрессия. Рассмотрим, как реальные данные, так и модельные (симуляцию Монте-Карло).

Часть 1. Реальные данные

Чтобы было интереснее, рассказ построен на примерах, причем в качестве данных (и в этой, и в следующих, статьях) я буду стараться брать статистику прямо отсюда, с Хабра. А именно, неделю назад я написал свою первую статью на Хабре (про Mathcad Express, в котором и будем все считать). И вот теперь статистику по ее просмотрам за 10 дней и предлагаю в качестве исходных данных. На графике это ряд Views, синяя линия. Второй ряд данных (Regs, с коэффициентом 100) показывает число читателей, выполнивших после прочтения определенное действие (регистрацию и скачивание дистрибутива Mathcad Prime).

Mathcad Prime

Так уж получилось, что у меня, кроме статистики просмотра статьи (с Хабра), был доступ к статистике скачиваний Mathcad (по ссылке, которую я дал внутри текста статьи). Таким образом, у нас все есть для того, чтобы разобраться с таким понятием интернет-маркетинга, как конверсия. Конверсией обычно называют отношение числа посетителей сайта, выполнивших на нём покупку, регистрацию или т.п. к общему числу посетителей. Например: в первый день публикации мою статья была просмотрена 5 тыс. раз, а скачиваний было 20, т.е. конверсия составила 0.4%.

Все картинки — это скриншоты Mathcad Express (сами расчеты можете взять здесь, повторить, а при желании изменить и использовать для своих нужд). Исходные данные (три вектора) я ввел руками:

Mathcad Prime

Читать далее
4 года назад
#
Mathcad Express — бесплатный математический редактор, про который мало кто знает

Прежде всего, приветствую первых посетителей моего блога. Это моя первая статья на Хабре и я надеюсь, что смогу рассказать вам здесь много полезного.

РТС Mathcad – это характерный пример математического ПО, предназначенного для осуществления, как численных, так и аналитических расчетов по формулам и визуализации их результатов в виде графиков. На протяжении последних лет Mathcad стал очень популярным, и его, на мой взгляд, по праву можно считать математическим пакетом №1 в мире.

Сначала несколько фактов о Mathcad, конечно, известных большинству читателей, т.к. Mathcad у нас уже не один десяток лет используется в ВУЗовском обучении, научных и инженерных расчетах. Скорее всего, вы использовали «старую» версию Mathcad (последняя – за номером 15), мало изменившуюся еще с прошлого века. В наши дни она вполне успешно сосуществует с более молодым семейством Mathcad, которое носит имя Mathcad Prime. Таким образом, разработчики несколько лет назад полностью переписали код программы, но заботиться о 100%-й совместимости не стали. Поэтому сейчас они благополучно поддерживают оба семейства – и «старый» Mathcad, и «новый» Mathcad Prime. Дальше и в этой статье, и в моем блоге, будем говорить именно о Mathcad Prime.

Mathcad Prime 3.0

Сразу скажу, что русскоязычный дистрибутив, полнофункциональную 30-дневную версию Mathcad Prime вы можете скачать с сайта русского реселлера РТС. Если вы уже собрались попробовать ее в работе, мой совет – не торопитесь в Мастере установки согласиться с включением тестового 30-дневного периода. Дело в том, что Mathcad Prime, наряду с мощной полнофункциональной версией (окно которой вы видите сверху) имеет бесплатную ограниченную версию, которая называется Mathcad Express. Особенность Mathcad Express заключается в том, что большинство функций в этой версии выключено и являются недоступными. Тем не менее, в программе Mathcad Express остается довольно богатый функционал, достаточный, по крайней мере, для того, чтобы изучать математику в школе и на 1-м курсе технического ВУЗа.

Mathcad Express Prime 3.0

Читать далее
92 93 95

Авторизация

Войдите, используя Ваш аккаунт

Войти с помощью

Пользователи