Что такое machine learning: Введение в машинное обучение / Habr – Что такое машинное обучение, для чего оно нужно и как работает

Содержание

Что такое машинное обучение, для чего оно нужно и как работает

Многие пользователи постиндустриальной эпохи задавались вопросом: Machine Learning – что это? Фантастическое будущее, которое уже наступило или очередная непонятная теория вроде квантового дуализма. Не то и не другое.


Машинное обучение (МО), а именно так переводится этот термин, является ветвью искусственного интеллекта. Более детальнее – это методика анализа данных, которые позволяют машине/роботу/аналитической системе самостоятельного обучаться посредством решения массива сходных задач.

Выглядит немного громоздко. Если упростить, то технология машинного обучения — это поиск закономерностей в массиве представленной информации и выбор наилучшего решения без участия человека.

Принцип МО интересно продемонстрировали в гугловском ролике «Google’s DeepMind AI Just Taught Itself To Walk».

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

Что касается фантастического будущего, то МО условно делят на три стадии внедрения:

  1. Технологии получают приставку «инновационные», а значит, к ним имеют доступ только крупные корпорации и правительственные структуры. Например, Google и Amazon, IBM и Apple первыми стали внедрять искусственный интеллект. Собственно любая система, которая пытается предсказать покупательский спрос на основе массива данных, связана с технологией машинного обучения.
  2. Технологиями пользуются люди с определенным багажом знаний в IT сфере, которые имеют доступ к современным разработкам, гаджетам. Появление новых сервисов, основанных на технологии искусственного интеллекта. Яркий пример – аналитические машины Гугла и Яндекса в контекстной рекламе.
  3. Технологии доступны даже школьнику, людям «лампового» поколения, которые вполне серьезно опасаются «Восстания машин» по аналогии с блокбастером «Терминатор».


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

Сфера применения

Мы рассмотрели Machine Learning – что это понятие означает. Теперь самое время рассмотреть для чего используется МО в бизнесе и жизни.

Спросите человека, увлеченного робототехникой, о сфере применения машинного обучения. Вы услышите много фантастических историй. Например, роботы будут самостоятельно обучаться выполнять поставленные человеком задачи. Добывать в недрах Земли полезные ископаемые, бурить нефтяные и газовые скважины, исследовать глубины океана, тушить пожары и прочее. Программисту не нужно будет расписывать массивные и сложные программы, боясь ошибиться в коде. Робот, благодаря МО, сам будет обучаться вести себя в конкретной ситуации на основе анализа данных.


Здорово, но пока фантастично. В будущем, может даже и не слишком далеком – это станет реальностью.

На что сейчас способен искусственный интеллект и машинное обучение. Сегодня технологию используют больше в маркетинговых целях. Например, Google и Яндекс применяют МО для показа релевантной рекламы пользователям. Вы замечали не раз, что поискав в сети интересующий товар, потом вам несколько часов, а то и дней, показывают похожие предложения.

По такому же принципу формируются умные ленты в соцсетях. Аналитические машины ФБ, ВК, Инстаграм, Твиттер исследуют ваши интересы – какие посты чаще просматриваете, на что кликаете, какие паблики или группы посещаете и другое. Чем дольше и чаще вы активничаете в соцсетях, тем более персонализированной становится ваша лента новостей. Это и хорошо и плохо. С одной стороны – машина отсеивает массив неинтересной (по её мнению) информации, а с другой – она сужает ваш кругозор. Маркетинг – ничего личного!


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

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


Виды машинного обучения

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

  1. Обучение с учителем (supervised learning). В этом случае в аналитическую систему загружается массив данных по конкретной задаче и задается направление – цель анализа. Как правило, нужно предсказать что-либо или проверить какую-либо гипотезу.

    Например, у нас есть данные о доходах интернет-магазина за полгода работы. Мы знаем, сколько продано товаров, сколько потрачено денег на привлечение клиентов, ROI, средний чек, количество кликов, отказов и другие метрики. Задача машины проанализировать весь массив данных и выдать прогноз дохода на предстоящий период – месяц, квартал, полгода или год. Это регрессивный метод решения задач.

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

  2. Обучение без учителя (unsupervised learning). Обучение строится на том, что человеку и программе неизвестны правильные ответы заранее, имеется только некий массив данных. Аналитическая машина, обрабатывая информацию, сама ищет взаимосвязи. Зачастую на выходе имеем неочевидные решения.

    Например, мы знаем данные о весе, росте и типе телосложения 10 000 потенциальных покупателей джемперов определенного фасона. Загружаем информацию в машину, чтобы разбить клиентов по кластерам в соответствии с имеющимися данными. В результате мы получим несколько категорий людей со схожими характеристиками, чтобы для них выпустить джемпер нужного фасона. Это задачи кластеризации. Другой пример. Чтобы описать какое-либо явление приходится задействовать 200-300 характеристик. Соответственно визуализировать такие данные крайне сложно, а разобраться в них просто невозможно. Аналитическая система получает задание обработать массив характеристик и выбрать схожие, то есть сжать данные до 2-5-10 характеристик. Это задачи уменьшения размерности.

  3. Глубокое обучение (Deep learning). Глубокое машинное обучение – это обязательно анализ «Больших данных» — Big Data. То есть одним компьютером, одной программой переработать столько информации просто невозможно. Поэтому используются нейронные сети. Суть такого обучения в том, что огромное поле информации разделяется на небольшие сегменты данных, обработка которых делегируется другим устройствам. Например, один процессор только собирает информацию по задаче и передает дальше, четыре других процессора анализируют собранные данные и передают результаты дальше. Следующие в цепочке процессоры ищут решения.

    Например, система распознавания объектов работает по принципу нейросети. Сначала фотографируется объект целиком (получение графической информации), потом система разбивает данные на точки, находит линии из этих точек, строит из линий простые фигуры, а из них – сложные двумерные и далее 3D-объекты.

Классы задач машинного обучения


Обобщим задачи МО:

  1. Регрессия. На основании массива признаков или характеристик предсказать вещественный результат. То есть машина должна выдать конкретную цифру. Например, предсказать стоимость акций на бирже, количество запросов по ключевому слову, бюджет контекстной рекламы и другое.
  2. Классификация. Задача определить по количеству и качеству признаков, характеристик категорию объекта. Например, распознать по снимку конкретного человека в розыске, имея только описания на словах, определить спам, выявить болезнь у пациента.
  3. Кластеризация. Данные разбиваются на похожие категории. Например, космические объекты относят в конкретные категории по схожим признакам (удаленность, размер, планета или звезда и другие).
  4. Уменьшение размерности. Сжатие массива характеристик объекта до меньшего количества признаков для дальнейшей визуализации или использования в работе. Например, сжатие массива данных в архивы для передачи по сети.

Основы машинного обучения


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

Что для этого нужно:

  1. Владеть английским языком на нормальном уровне. Зачем? Чтобы общаться без проблем в кругу единомышленников. В Европе, кстати, незнание английского считается признаком дурного тона. Акцент никого не интересует, но если имеются трудности с построением предложений, то будут трудности и с общением.
  2. Основы программирования. В машинном обучении применяется Python или Matlab. Также не лишним будет понимать, как работают базы данных.
  3. Неплохо подтянуть знания в математике, особенно раздел алгоритмов. Для начала подойдет классический курс Эндрю Энга «Машинное обучение». В курсе много практики, и, главное, нет упора на обширный математический багаж.

Для углубленного обучения МО советуем записаться на курсы от ВШЭ или специализацию от МФТИ.

Предлагаем добавить в свою библиотеку следующие книги по искусственному интеллекту и МО:

  • Стюарт Рассел, Питер Норвиг «Искусственный интеллект. Современный подход»
  • Джордж Ф. Люгер Искусственный интеллект. «Стратегии и методы решения сложных проблем»
  • Петер Флах «Машинное обучение»
  • Себастьян Рашка «Python и машинное обучение»
  • Шарден Б., Массарон Л., Боскетти А. «Крупномасштабное машинное обучение вместе с Python»
  • Тарик Рашид «Создаем нейронную сеть»
  • Хенрик Бринк, Джозеф Ричардс «Машинное обучение»

Все книги можно купить на Озоне.

Резюме

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

Machine Learning (машинное обучение): что это такое

Machine Learning, машинное обучение

Machine learning — множество математических, статистических и вычислительных методов для разработки алгоритмов, способных решить задачу не прямым способом, а на основе поиска закономерностей в разнообразных входных данных.

Что такое Machine Learning

Общий термин «Machine Learning» или «машинное обучение» обозначает множество математических, статистических и вычислительных методов для разработки алгоритмов, способных решить задачу не прямым способом, а на основе поиска закономерностей в разнообразных входных данных [1].  Решение вычисляется не по четкой формуле, а по установленной зависимости результатов от конкретного набора признаков и их значений. Например, если каждый день в течении недели земля покрыта снегом и температура воздуха существенно ниже нуля, то вероятнее всего, наступила зима. Поэтому машинное обучение применяется для диагностики, прогнозирования, распознавания и принятия решений в различных прикладных сферах: от медицины до банковской деятельности.

Типы и суть Machine Learning

Выделяют 2 типа машинного обучения [1]:

  1. Индуктивное или по прецедентам, которое основано на выявлении эмпирических закономерностей во входных данных;
  2. Дедуктивное, которое предполагает формализацию знаний экспертов и их перенос в цифровую форму в виде базы знаний.

Дедуктивный тип принято относить к области экспертных систем, поэтому общий термин «машинное обучение» означает обучение по прецедентам. Прецеденты или обучающая выборка – это наборы входных объектов и соответствующих им результатов. При этом не существует четкой формулы, которая аналитически описывает зависимость между результатами и входами. Например, какая погода будет завтра, если на протяжении недели дни были морозные, солнечные, с низкой влажностью воздуха, без ветра и осадков? При этом следует учесть еще множество параметров: географические координаты, рельеф местности, движение теплых и холодных фронтов воздуха и пр. Необходимо построить алгоритм, который выдаст достаточно точный результат для любого возможного входа. Точность результатов регулируется оценочным функционалом качества. Таким образом, решение формируется эмпирически, на основе анализа накопленного опыта. При этом обучаемая система должна быть способна к обобщению – адекватному отклику на данные, выходящие за пределы имеющейся обучающей выборки. На практике входные данные могут быть неполными, неточными и разнородными. Поэтому существует множество методов машинного обучения [2]. Можно сказать, что машинное обучение реализует подход Case Based Reasoning (CBR) — метод решения проблем рассуждением по аналогии, путем предположения на основе подобных случаев (прецедентов). 

машинное обучение, Machine LearningСуть и смысл машинного обучения (Machine Learning)

Методы Machine Learning

Существует множество методов машинного обучения. Мы перечислим самые популярные, оставив их подробную классификацию специализированным ресурсам [1, 2, 3]. Выделяют 2 вида классического Machine Learning:

  1. С учителем (supervised learning), когда необходимо найти функциональную зависимость результатов от входов и построить алгоритм, на входе принимающий описание объекта и на выходе выдающий ответ. Функционал качества, как правило, определяется через среднюю ошибку ответов алгоритма по всем объектам выборки. К обучению с учителем относятся задачи классификации, регрессии, ранжирования и прогнозирования.
  2. Без учителя (unsupervised learning), когда ответы не задаются, и нужно искать зависимости между объектами. Сюда входят задачи кластеризации, поиска ассоциативных правил, фильтрации выбросов, построения доверительной области, сокращения размерности и заполнения пропущенных значений.

К неклассическим, но весьма популярным методам относят обучение с подкреплением, в частности, генетические алгоритмы, и искусственные нейронные сети. В качестве входных объектов выступают пары «ситуация, принятое решение», а ответами являются значения функционала качества, который характеризует правильность принятых решений (реакцию среды). Эти методы успешно применяются для формирования инвестиционных стратегий, автоматического управления технологическими процессами, самообучения роботов и других подобных задач [2].

Ниже на рисунке показана классификация наиболее часто используемых методов Machine Learning [3].

методы Machine LearningКлассификация методов Machine Learning [3]

 

Средства реализации Machine Learning

Сегодня чаще всего для создания программ машинного обучения используются языки R, Python, Scala и Julia [4]. Они поддерживаются многими интегрированными средами разработки, в частности, R-Studio, R-Brain, Visual Studio, Eclipse, PyCharm, Spyder, IntelliJ IDEA, Jupyter Notebooks, Juno и др. [4]. На наших практических курсах мы научим вас успешной работе с этими инструментами, чтобы потом вы могли самостоятельно формировать наборы входных данных, строить эффективные алгоритмы для решения прикладных задач своей области: от нефтегазовой промышленности до биржевой аналитики. Выбирайте свой обучающий интенсив и приходите к нам на занятия!

 

Источники

  1. https://ru.wikipedia.org/wiki/Машинное_обучение
  2. http://www.machinelearning.ru/wiki/index.php?title=Машинное_обучение
  3. https://vas3k.ru/blog/machine_learning/
  4. https://semanti.ca/blog/?recommended-ide-for-data-scientists-and-machine-learning-engineers

Related Entries

Первые шаги в машинном обучении / Habr

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

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

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

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


Втыкаем лопату


Первым делом я отправился на официальный сайт TensorFlow и прочитал ML for Beginners и TensorFlow for beginners. Материалы на английском.

TensorFlow это поделка команды Google и наиболее популярная библиотека для работы с машинным обучением, которая поддерживает Python, Java, C++, Go, а также возможность использования вычислительных мощностей графической видеокарты для расчетов сложных нейросетей.

В своих поисках я нашел еще одну библиотеку для машинного обучения Scikit-learn ориентированную на Python. Плюс этой библиотеки, в большом количестве алгоритмов для машинного обучения прямо из коробки, что было несомненным плюсом в моем случае, так как презентация в пятницу, и очень хотелось продемонстрировать рабочую модель.

В поисках готовых примеров я наткнулся на туториал по определению языка на котором написан текст с помощью Scikit-learn.

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

Первым делом, первым делом датасеты…


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

Данные в которых алгоритм будет искать закономерности называются features.
Категория, к которой относится та или иная feature, называется label. Важно отметить, что входные данные могут иметь несколько features, но всего один label.

В классическом примере машинного обучения, определения разновидностей цветков ириса по длине пестиков и тычинок, каждый отдельный столбец с информацией о размере это feature, а последний столбец, который означает к какому из подвидов ириса относится цветок с такими значениями это label

Способ, которым я буду решать проблему классификации, называется supervised learning, или обучение под надзором. Это значит, что в процессе обучения алгоритм будет получать и features и labels.

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

Я написал скрипт, который генерировал случайные адреса электронной почты и SQL инъекции. В итоге в моем csv файле получалось три типа данных: случайные имейлы (20 тыс.), случайные имейлы с SQL инъекцией (20 тыс.) и чистые SQL инъекции (10 тыс.). Выглядело это примерно вот так:

Теперь исходные данные нужно считать. Функция возвращает лист X, в котором содержатся features, лист Y, в котором содержатся labels для каждой feature и лист label_names, который просто содержит текстовое определения для labels, нужен для удобства при выводе результатов.

import csv

def get_dataset():
   X = []
   y = []
   label_names = ["safe data","Injected email"]
   with open('trainingSet.csv') as csvfile:
       readCSV = csv.reader(csvfile, delimiter='\n')
       for row in readCSV:
           splitted = row[0].split(',')
           X.append(splitted[0])
           y.append(splitted[1])

          
        
   print("\n\nData set features {0}". format(len(X)))
   print("Data set labels   {0}\n". format(len(y)))

   print(X)

   return X, y, label_names

Далее эти данные нужно разбить на тренировочный сет и на тестовый. В этом нам поможет заботливо написанная для нас функция cross_validation.train_test_split(), которая перетасует записи и вернет нам четыре сета данных — два тренировочных и два тестовых для features и labels.
# Split the dataset on training and testing sets
X_train, X_test, y_train, y_test = cross_validation.train_test_split(X,y,test_size=0.2,random_state=0)

Затем мы инициализируем объект vectorizer, который будет считывать переданные в него данные по одному символу, комбинировать их в N-граммы и переводить в числовые векторы, который способен воспринимать алгоритм машинного обучения.
#Setting up vectorizer that will convert dataset into vectors using n-gram
vectorizer = feature_extraction.text.TfidfVectorizer(ngram_range=(1, 4), analyzer='char')

Скармливаем данные


Следующий шаг мы инициализируем pipeline и передадим в него ранее созданный vectorizer и алгоритм, которым мы хотим анализировать наш дата сет. В данном мы будем использовать алгоритм логистической регрессии.
#Setting up pipeline to flow data though vectorizer to the liner model implementation
pipe = pipeline.Pipeline([('vectorizer', vectorizer), ('clf', linear_model.LogisticRegression())])

Модель готова к перевариванию данных. Теперь просто передаем тренировочные сеты features и labels в наш pipeline и модель начинает обучение. Следующей строкой мы пропускаем тестовый сет features через pipeline, но теперь мы используем predict, чтобы получить число правильно угаданных данных.
#Pass training set of features and labels though pipe.
pipe.fit(X_train, y_train)

#Test model accuracy by running feature test set
y_predicted = pipe.predict(X_test)

Если хочется узнать насколько модель точна в предсказаниях, можно сравнить угаданные данные и тестовый лист labels.
print(metrics.classification_report(y_test, y_predicted,target_names=label_names))

Точность модели определяется величиной от 0 до 1, и можно перевести в проценты. Эта модель дает правильный ответ в 100% случаев. Конечно, используя реальные данные, подобного результата будет добиться не так просто, да и задача достаточно простая.

Последний финальный штрих это сохранить модель в обученном виде, чтоб ее можно было без повторного обучения использовать в любой другой python программе. Мы сериализуем модель в pickle файл с помощью встроенной в Scikit-learn функции:

#Save model into pickle. Built in serializing tool
joblib.dump(pipe, 'injection_model.pkl')

Небольшая демонстрация того, как использовать сериализованную модель в другой программе.
import numpy as np
from sklearn.externals import joblib

#Load classifier from the pickle file
clf = joblib.load('injection_model.pkl')

#Set of test data
input_data = ["[email protected]",
           "[email protected]'",
           "[email protected]",
           "'",
           "[email protected]",
           "[email protected]",
           "' OR 1=1",
           "[email protected]'",
           "andrew@mail' OR 1=1",
           "an'[email protected]",
           "[email protected]'"]

predicted_attacks = clf.predict(input_data).astype(np.int)
label_names = ["Safe Data", "SQL Injection"]

for email, item in zip(input_data, predicted_attacks):
 print(u'\n{} ----> {}'.format(label_names[item], email))

На выходе мы получим вот такой результат:

Как видите, модель достаточно уверенно определяет SQL инъекции.

Заключение


В итоге мы имеем тренированную модель для определения SQL инъекций, в теории, мы можем воткнуть ее в серверную часть, и в случае определения инъекции перенаправлять все запросы за фальшивую базу данных, чтоб отвадить взгляд от других возможных уязвимостей. Для демонстрации в конце недели я написал небольшой REST API на Flask.

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

Полный код

from sklearn import ensemble
from sklearn import feature_extraction
from sklearn import linear_model
from sklearn import pipeline
from sklearn import cross_validation
from sklearn import metrics
from sklearn.externals import joblib

import load_data
import pickle

# Load the dataset from the csv file. Handled by load_data.py. Each email is split in characters and each one has label assigned
X, y, label_names = load_data.get_dataset()

# Split the dataset on training and testing sets
X_train, X_test, y_train, y_test = cross_validation.train_test_split(X,y,test_size=0.2,random_state=0)

#Setting up vectorizer that will convert dataset into vectors using n-gram
vectorizer = feature_extraction.text.TfidfVectorizer(ngram_range=(1, 4), analyzer='char')

#Setting up pipeline to flow data though vectorizer to the liner model implementation
pipe = pipeline.Pipeline([('vectorizer', vectorizer), ('clf', linear_model.LogisticRegression())])

#Pass training set of features and labels though pipe.
pipe.fit(X_train, y_train)

#Test model accuracy by running feature test set
y_predicted = pipe.predict(X_test)

print(metrics.classification_report(y_test, y_predicted,target_names=label_names))

#Save model into pickle. Built in serializing tool
joblib.dump(pipe, 'injection_model.pkl')


Справочные Материалы


Оставляю список полезных ресурсов, которые помогли мне с данным проектом (почти все они на английском)

Tensorflow for begginers
Scikit-Learn Tutorials
Building Language Detector via Scikit-Learn

Нашел несколько отличных статей на Medium включая серию из восьми статей, которые дают хорошее представление, о машинном обучении на простых примерах. (UPD: русский перевод этих же статей)

Машинное обучение и искусственный интеллект

Что такое машинное обучение

Машинное обучение (Machine learning, ML) – свод методов в области искусственного интеллекта, набор алгоритмов, которые применяют, чтобы создать машину, которая учится на собственном опыте. В качестве обучения машина обрабатывает огромные массивы входных данных и находит в них закономерности.

Не стоит путать понятия Data science и Machine learning. Эти инструменты во многом пересекаются, но всё же они разные и каждый со своими задачами. Также в этой статье мы раз и навсегда разберемся, как не смешивать в одну кучу машинное обучение, искусственный интеллект и нейросети.

Искусственный интеллект (Artificial intelligence, AI) – различные технологические и научные решения и методы, которые помогают сделать программы по подобию интеллекта человека. Artificial intelligence включает в себя множество инструментов, алгоритмов и систем, среди которых также все составляющие Data science и Machine learning.

машинное обучение и искусственный интеллект artificial intelligence, machine learning

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

data science

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

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


machine learning


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


neural network

Цель машинного обучения и сферы его применения

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

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

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


Что нужно для качественного машинного обучения

Машинное обучение строится на трех китах:

данные, признаки, алгоритмы

А) данные – базовая информация, предоставить которую мы обычно просим клиента. Сюда входят любые выборки данных, работе с которыми нужно обучить систему;

Б) признаки – эта часть работы проводится в тесном сотрудничестве с клиентом. Мы определяем ключевые бизнес-потребности и совместно решаем какие именно характеристики и свойства должна отслеживать система в результате обучения;

В) алгоритм – выбор метода для решения поставленной бизнес-задачи. Эту задачу мы решаем без участия клиента, силами наших сотрудников.

Данные (Data)

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

Например, чтобы научить почту отфильтровывать спам от важных писем, необходимы примеры. И чем больше их выборка, тем лучше. Таким образом система учится воспринимать конкретные слова – «Купить», «Дополнительный доход», «Зарабатывай дома», «Деньги», «Кредит», «Увеличение потенции» – как признаки спама и отправлять такие письма в отдельную папку.

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

Самая сложная и одновременно объемная часть работы – сбор этих самых данных. Существует два метода сбора данных: вручную и автоматически. Ручной метод гораздо более медленный, но при этом точный. Автоматический же гораздо более быстрый, но при этом допускает большее количество ошибок.

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


Признаки (свойства, метрики, фичи, характеристики, features).

Например, в случае с автомобилем признаками будут пробег, количество цилиндров, максимально возможная скорость. В случае с покупателем: возраст, пол, образование, уровень дохода и т.д. В случае с животными: порода, рост, длина от кончика хвоста до носа, окрас.

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

Пример датасета, составленного по признакам: https://github.com/php-ai/php-ml/blob/master/data/wine.csv

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


Алгоритм (Algorithm)

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

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

Основные виды машинного обучения

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

Виды машинного обучения

По признаку наличия учителя, обучение делится на обучение с учителем (Supervised Learning), без учителя (Unsupervised Learning) и с подкреплением (Reinforcement Learning).

— Обучение с учителем применяют когда нужно научить машину распознавать объекты или сигналы. Общий принцип обучения с учителем это “смотри, вот это дверь и это тоже дверь, и вот это тоже дверь”.

— Обучение без учителя использует принцип “эта вещь такая же, как другие”. Алгоритмы изучают сходства и могут обнаружить различие и выполнить обнаружение аномалий, распознавая, что является необычным или несхожим.

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

По типу применяемых алгоритмов можно выделить два вида:

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

Б) нейронные сети и глубокое обучение – наиболее современный подход к машинному обучению. Нейронные сети применяются там, где нужны распознавание или генерация изображений и видео, сложные алгоритмы управления или принятия решений, машинный перевод и подобные сложные задачи.

Несколько подходов можно объединить и тогда получатся ансамбли моделей.

Главная польза от машинного обучения


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

Качественный анализ характеристик машинами подскажет, куда стоит направить больше усилий для привлечения клиентов, а задача людей – продумать стратегию для этих усилий. Хотите узнать, как лучше использовать машинное обучение и искусственный интеллект в целом для решения ваших бизнес-задач? Свяжитесь с нами, подскажем вариант, наиболее подходящий вашему бизнесу.

11.01.2019

Используемые в статье картинки взяты из открытых источников и используются как иллюстрации.

Машинное обучение: как оно применяется в жизни — Рамблер/новости

Привет! В прошлый раз мы обсудили, что такое Data Science и выяснили, что одна из важнейших составляющих науки о данных — это машинное обучение. Мы уже знаем, что идея машинного обучения достаточно проста: найти закономерность в имеющихся данных, чтобы затем распространить ее на новые объекты. В этой статье мы чуть подробнее расскажем о том, каким бывает машинное обучение, какие типы задач оно решает и как применяется в жизни.

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

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

Объекты в машинном обучении описываются набором признаков. Вернемся к примеру с кофе из прошлой статьи: там объектами были люди, и мы описывали их единственным признаком — количеством сна. Признаки иначе называются независимыми переменными. Важно заметить, что признаки должны быть представлены в численном виде, потому что только так ими можно оперировать математически и обрабатывать компьютерно. Совокупность объектов, которые используются для того, чтобы построить модель, называется обучающей выборкой: десять синих точек на первом графике и были нашей обучающей выборкой.

Обучение с учителем

Методы обучения с учителем применяются тогда, когда для имеющихся объектов обучающей выборки мы знаем так называемые ответы, а для новых объектов мы хотим их предсказать. Ответы также называются зависимой переменной. В этом классе задач в свою очередь выделяется несколько типов.

В первом типе ответами являются значения некоторой численной величины, как было в нашей истории с кофе: для каждого объекта обучающей выборки мы знали количество выпитого кофе, а для нового объекта Никиты модель это значение предсказывала. Этот тип задач, когда зависимая переменная является вещественным числом (то есть может принимать любые значения на всей числовой прямой), называется задачей регрессии.

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

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

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

Еще один тип обучения с учителем — задача ранжирования. Она решается, когда вы ищете что-то в поисковике вроде Google: есть множество документов и необходимо отсортировать их в порядке их релевантности (смысловой близости) запросу.

Обучение без учителя

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

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

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

Помимо обучения с учителем и без учителя, существуют и более изысканные типы задач. Например, в частичном обучении ответы известны только для части объектов выборки.

Алгоритмы машинного обучения

Внутри вышеописанных типов задач в машинном обучении существуют различные алгоритмы. С одним из них мы уже познакомились: это линейная регрессия — именно ее мы применяли в задаче предсказания количества кофе. Линейная регрессия является одним из самых хорошо изученных методов статистики и машинного обучения. Она подходит для описания линейных зависимостей, то есть таких, которые можно хорошо приблизить прямой линией.

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

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

Глубинное обучение

Сейчас алгоритмы машинного обучения можно условно разделить на традиционные и методы глубинного обучения (это общее название для разного вида многослойных нейронных сетей). Для успешной работы традиционных алгоритмов очень важен такой этап предобработки данных, как feature engineering (для этого термина нет конвенционального перевода на русский язык; грубо его можно перевести как конструирование признаков). Это процесс формирования и отбора признаков. Как правило, работа с признаками — это трудоемкий, времязатратный процесс, который требует глубокого погружения в предметную область решаемой задачи.

Джереми Говард, один из авторов известного курса про глубинное обучение fast.ai, приводит следующий пример. Команда специалистов из Стенфорда во главе с ученым Эндрю Бэком занималась исследованием рака молочной железы. Чтобы построить модель, способную предсказывать выживет пациентка с опухолью или нет, им пришлось изучить огромное количество снимков биопсий молочной железы. Таким образом они определили, какие паттерны на снимках могут быть связаны со смертью пациентки и сформировали сотни сложных признаков, таких как связь между соседними эпителиальными клетками. Затем команда программистов разработала алгоритмы для правильного распознавания этих признаков со снимков.

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

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

Необходимые навыки и варианты курсов

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

В остальном все в ваших руках. Сейчас в интернете можно найти множество онлайн-курсов по теме, в том числе и бесплатных. Из таких для начала мы рекомендуем «Введение в машинное обучение» от НИУ ВШЭ, Machine Learning от известного ученого из Стенфорда Эндрю Ына (правда, для сдачи заданий по программированию потребуется MATLAB/Octave) и уже упомянутый нами выше fast.ai.

Материалы по теме:

Почему ваш проект по машинному обучению может потерпеть неудачу: как этого избежать

30 самых удивительных проектов по машинному обучению

Как применение метода глубокого обучения влияет на эффективность онлайн-кампаний?

Как ИИ может изменить методы оценки умственных способностей у детей

За советом к ИИ: как робот может помочь частному инвестору

Фото на обложке: Unsplash

Машинное обучение для самых маленьких

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

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

Машинное обучение состоит в том, что исходные алгоритмы могут сами рассказать кое-что интересное о предоставленных данных, и вам не придётся писать для этого отдельный код. Вместо написания кода вы скармливаете данные исходному алгоритму, и он сам выстраивает логику на основании этих данных.

Возьмём, к примеру, алгоритм классификации. Он может разбивать данные на различные группы. Такой же алгоритм классификации, который используется для распознавания рукописных символов, может быть полезен для разделения электронных сообщений по группам «спам» и «не спам». И для этого не нужно менять ни одну строчку кода. Алгоритм один и тот же, но его обучают разными данными, и поэтому он выстраивает разную логику классификации.

Машинное обучение — это универсальный термин, который относится к огромному количеству исходных алгоритмов.

Два вида алгоритмов машинного обучения

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

Обучение с учителем

Представьте, что вы агент по недвижимости. Ваш бизнес растёт, и вы нанимаете себе в подмогу новых агентов-стажёров. Но вот беда: вы-то можете с одного взгляда определить стоимость недвижимости, а вашим стажёрам опыта не хватает.

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

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


Так выглядят данные для нашего алгоритма

Используя эти данные, мы можем создать программу, которая спрогнозирует стоимость любой квартиры в вашем городе:

Это и называется обучением с учителем. Вы уже знаете, сколько стоила каждая проданная квартира; другими словами, вы знаете решение проблемы и вам остаётся только выстроить логику.

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

То, с чем работает алгоритм, выглядит как попытка восстановить информацию в этом примере:

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

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

Обучение без учителя

Вы снова тот самый предприимчивый агент по недвижимости. Что делать, если вы не знаете цену каждой квартиры? Хорошие новости: даже если вы знаете только площадь, количество комнат и расположение квартиры, вы уже можете совершить крутой анализ. Это и называется алгоритмом обучения без учителя.

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

Представьте, что вам дают список чисел и говорят: «Понятия не имею, что эти числа означают, но если у тебя получится найти в них закономерность — ты молодец». Поиском этих закономерностей и занимается алгоритм обучения без учителя.

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

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

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

Неужели возможность спрогнозировать цену квартиры уже может считаться машинным обучением?

Человеческий мозг способен анализировать любую ситуацию и обучаться без каких-либо внешних указаний. Если вы, к примеру, долгое время занимаетесь продажей недвижимости, у вас разовьётся некое инстинктивное чувство на правильную цену для конкретной квартиры; нюх на клиентов и на выгодные сделки. Целью «сильного искусственного интеллекта» является как раз воссоздание такой способности человеческого мозга с вычислительными мощностями компьютера.

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

Поскольку «способность решить уравнение на основе предоставляемых данных» — слишком громоздкий термин, всё это решили назвать «машинным обучением» в узко специализированной сфере.

Если вы читаете эту статью лет через 50 после её публикации, она уже вам ничем не может быть полезна. Закрой её и попроси своего робота приготовить тебе сэндвич, человек будущего!

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

Подумали? Приступим.

Если бы вы ничего не знали о машинном обучении, вы бы, скорее всего, попытались написать несколько простых правил, оценивающих стоимость дома:

# !/usr/bin/python
#  -*- coding: utf-8 -*-
def estimate_house_sales_price(num_of_bedrooms, sqm, neighborhood):
    price = 0
    #  Средняя цена квартиры в моем районе – 200$ за кв.м
    price_per_sqm = 200
    if neighborhood == "Арбат":
        #  В некоторых районах квартиры стоят дороже
        price_per_sqm = 400
    elif neighborhood == "Южное Бутово":
        #  В других районах квартиры стоят дешевле
        price_per_sqm = 100
    #  начнём с базовой оценки стоимости на основе общей площади квартиры
    price = price_per_sqm * sqm
    #  теперь уточним нашу оценку, указав количество комнат
    if num_of_bedrooms == 0:
        #  квартиры-студии стоят дешевле
        price = price — 20000
    else:
        #  квартиры с большим количеством комнат
        #  стоят дороже
        price = price + (num_of_bedrooms * 1000)
    return price

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

А давайте обучим компьютер

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

# !/usr/bin/python
#  -*- coding: utf-8 -*-
def estimate_house_sales_price(num_of_bedrooms, sqm, neighborhood):
    price = <компьютер, сделай всё за меня>
    return price

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

Это упростит ваш начальный код (со всеми этими безумными if и else), превратив его во что-то вроде:

# !/usr/bin/python
#  -*- coding: utf-8 -*-
def estimate_house_sales_price(num_of_bedrooms, sqm, neighborhood):
   price = 0
   #  добавим щепотку вот этого
   price += num_of_bedrooms * .841231951398213
   #  затем горсть вот этого
   price += sqm * 1231.1231231
   #  ещё ложечку вот этого
   price += neighborhood * 2.3242341421
   #  и немного пряностей
   price += 201.23432095
   return price

Обратите внимание на волшебные числа: .841231951398213, 1231.1231231,2.3242341421 и 201.23432095. Это наши коэффициенты. Если мы вычислим идеальные коэффициенты, которые будут работать для каждой квартиры, наша функция сама будет оценивать её стоимость!

Самый грубый способ рассчитать коэффициенты может выглядеть вот так:

Шаг 1:

Установим значения всех коэффициентов на 1.0:

# !/usr/bin/python
#  -*- coding: utf-8 -*-
def estimate_house_sales_price(num_of_bedrooms, sqm, neighborhood):
    price = 0
    #  добавим щепотку вот этого
    price += num_of_bedrooms * 1.0
    #  затем горсть вот этого
    price += sqm * 1.0
    #  ещё ложечку вот этого
    price += neighborhood * 1.0
    #  и немного пряностей
    price += 1.0
    return price

Шаг 2:

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

К примеру, если первую квартиру на самом деле купили за 250 000$, а ваша функция оценила её в 178 000 долларов, где-то по пути вы потеряли 72 000 долларов.

Теперь вычислите общую сумму потерь функции с каждой квартиры в вашей базе данных. Допустим, в вашей базе данных 500 лотов, и общая сумма составила 86 123 373$. Это степень ошибочности вашей функции.

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

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

Шаг 3:

Повторяйте Шаг 2 снова и снова, пока не проверите все возможные комбинации коэффициентов. Как только найдёте комбинацию, которая придаёт погрешности максимально близкое к нулю значение, — вы выиграли!

Как просто, да? Всего-то нужно взять данные, провести их через три простых этапа и прийти в итоге к функции, которая выдаёт предположительную стоимость каждой квартиры в городе. У = Успех.

Но рано радоваться, юные друзья. Вот несколько фактов, которые убьют все надежды на светлое будущее нашего решения:

  1. За последние 40 лет исследования в сфере лингвистики/перевода доказали, что исходные обучающиеся алгоритмы оказываются значительно эффективнее, чем правила, созданные настоящими людьми. Машинное обучение в таких случаях побеждает человеческий подход.
  2. Функция, которую вы тут наизобретали, ничегошеньки не знает. Она не знает, что такое «квадратные метры» или «комнаты». Всё, что она умеет — это тасовать числа, чтобы получить нужное значение.
  3. Вы сами понятия не имеете, почему работает именно такая комбинация коэффициентов. Вы написали функцию, которую сами не понимаете, но которая работает.
  4. А теперь представьте, что вместо обработки параметров «квадратные метры» и «количество комнат» ваша предиктивная функция способна обработать массив чисел. Давайте представим, что каждое число представляет собой яркость одного пикселя в изображении, сделанном камерой, расположенной на крыше вашей машины. Представьте, что вместо «цены» ваша функция выводит значение «на сколько градусов нужно повернуть руль автомобиля». Стойте-стойте… Да это же функция, которая позволит создать самоуправляемый автомобиль!

А что насчёт «Пробуй все варианты, пока не сдохнешь» из шага 3?

Конечно, это безумие — перебирать все возможные комбинации коэффициентов, чтобы найти лучшую. На это понадобится вечность и ещё пара недель.

Математики знают много изящных способов быстро найти годные значения без помощи бесконечного тупого перебора. Давайте поступим так:

  • Для начала напишем простое уравнение, которое заменяет собой действия в шаге 2 (нахождение погрешности):

  • Теперь немного видоизменим это уравнение, используя лексикон машинного обучения (пока не обращайте на это внимания):

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


График нашей функции выглядит как чаша. По вертикальной оси — значения погрешности

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

Как будем искать минимальную погрешность?

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

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

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


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

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

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

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

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

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

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

Как только вы увидите, как машинное обучение применяется к действительно сложным задачам (например, распознавание рукописного текста), у вас тут же возникнет обманчивое впечатление о том, что алгоритмы машинного обучения можно применять абсолютно во всех случаях, где у вас есть база данных. Просто даём алгоритму данные, а компьютер сам всё сделает!

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

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

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

Машинное обучение за год

Основы машинного обучения за неделю

Огромное спасибо Adam Geitgey за прекрасный пост на Medium

Перевод: Люся Ширшова.

Машинное обучение — это… Что такое Машинное обучение?

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

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

Общая постановка задачи обучения по прецедентам

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

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

Способы машинного обучения

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

  1. Метод коррекции ошибки
  2. Метод обратного распространения ошибки
  • Обучение без учителя — для каждого прецедента задаётся только «ситуация», требуется сгруппировать объекты в кластеры, используя данные о попарном сходстве объектов, и/или понизить размерность данных:
  1. Альфа-система подкрепления
  2. Гамма-система подкрепления
  3. Метод ближайших соседей
  1. Генетический алгоритм.
  • Активное обучение — отличается тем, что обучаемый алгоритм имеет возможность самостоятельно назначать следующую исследуемую ситуацию, на которой станет известен верный ответ:
  • Обучение с частичным привлечением учителя (semi-supervised learning) — для части прецедентов задается пара «ситуация, требуемое решение», а для части — только «ситуация»
  • Трансдуктивное обучение (transduction) — обучение с частичным привлечением учителя, когда прогноз предполагается делать только для прецедентов из тестовой выборки
  • Многозадачное обучение (multi-task learning) — одновременное обучение группе взаимосвязанных задач, для каждой из которых задаются свои пары «ситуация, требуемое решение»
  • Многовариантное обучение (multiple-instance learning) — обучение, когда прецеденты могут быть объединены в группы, в каждой из которых для всех прецедентов имеется «ситуация», но только для одного из них (причем, неизвестно какого) имеется пара «ситуация, требуемое решение»

Классические задачи, решаемые с помощью машинного обучения

Типы входных данных при обучении

  • Признаковое описание объектов — наиболее распространённый случай.
  • Описание взаимоотношений между объектами, чаще всего отношения попарного сходства, выражаемые при помощи матрицы расстояний, ядер либо графа данных
  • Временной ряд или сигнал.
  • Изображение или видеоряд.

Типы функционалов качества

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

Практические сферы применения

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

Машинное обучение имеет широкий спектр приложений:

Сфера применений машинного обучения постоянно расширяется. Повсеместная информатизация приводит к накоплению огромных объёмов данных в науке, производстве, бизнесе, транспорте, здравоохранении. Возникающие при этом задачи прогнозирования, управления и принятия решений часто сводятся к обучению по прецедентам. Раньше, когда таких данных не было, эти задачи либо вообще не ставились, либо решались совершенно другими методами.

Литература

  • Айвазян С. А., Енюков И. С., Мешалкин Л. Д. Прикладная статистика: основы моделирования и первичная обработка данных. — М.: Финансы и статистика, 1983.
  • Айвазян С. А., Енюков И. С., Мешалкин Л. Д. Прикладная статистика: исследование зависимостей. — М.: Финансы и статистика, 1985.
  • Айвазян С. А., Бухштабер В. М., Енюков И. С., Мешалкин Л. Д. Прикладная статистика: классификация и снижение размерности. — М.: Финансы и статистика, 1989.
  • Вапник В. Н. Восстановление зависимостей по эмпирическим данным. — М.: Наука, 1979.
  • Журавлев Ю. И., Рязанов В. В., Сенько О. В. «Распознавание». Математические методы. Программная система. Практические применения. — М.: Фазис, 2006. ISBN 5-7036-0108-8.
  • Загоруйко Н. Г. Прикладные методы анализа данных и знаний. — Новосибирск: ИМ СО РАН, 1999. ISBN 5-86134-060-9.
  • Шлезингер М., Главач В. Десять лекций по статистическому и структурному распознаванию. — Киев: Наукова думка, 2004. ISBN 966-00-0341-2.
  • Hastie, T., Tibshirani R., Friedman J. The Elements of Statistical Learning: Data Mining, Inference, and Prediction. — 2nd ed. — Springer-Verlag, 2009. — 746 p. — ISBN 978-0-387-84857-0.
  • Mitchell T. Machine Learning. — McGraw-Hill Science/Engineering/Math, 1997. ISBN 0-07-042807-7.
  • Ryszard S. Michalski, Jaime G. Carbonell, Tom M. Mitchell (1983), Machine Learning: An Artificial Intelligence Approach, Tioga Publishing Company, ISBN 0-935382-05-4[1].
  • Vapnik V.N. Statistical learning theory. — N.Y.: John Wiley & Sons, Inc., 1998. [1]
  • Bernhard Schölkopf, Alexander J. Smola Learning with Kernels. Support Vector Machines, Regularization, Optimization, and Beyond. — MIT Press, Cambridge, MA, 2002 ISBN 978-0-262-19475-4 [2]
  • I.H. Witten, E. Frank Data Mining: Practical Machine Learning Tools and Techniques (Second Edition). — Morgan Kaufmann, 2005 ISBN 0-12-088407-0 [3]

Ссылки

Ресурсы

Журналы

  • Pattern Recognition and Image Analysis

Конференции

Курсы лекций

Российские исследовательские группы и коммерческие фирмы

  • Лаборатория распознавания образов (московский Центр непрерывного математического образования).
  • ABBYY — один из ведущих мировых разработчиков ПО в области распознавания документов (OCR), ввода форм (ICR) и прикладной лингвистики.
  • BaseGroup — добыча данных, анализ и прогнозирование, создание прикладных аналитических систем (Рязань).
  • Forecsys — интеллектуальный анализ данных, прогнозирование продаж, кредитный скоринг, распознавание образов.
  • Megaputer — разработка и производство аналитических систем для углубленного анализа числовых и текстовых баз данных.
  • NeurOK — анализ данных и управление знаниями.
  • SnowCactus — Аналитические технологии для бизнеса.
  • Solutions — Центр технологий анализа данных и прогнозирования (Долгопрудный).
  • ZSoft — Проектирование, разработка и внедрение информационно-аналитических систем (Санкт-Петербург).

Примечания

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *