Машинное обучение: введение
Огромное количество сервисов, которыми мы пользуемся каждый день, используют машинное обучение. Google решает какую рекламу и когда показать. Amazon подбирает и предлагает товар, который может нам понравиться. Facebook сортирует новости, пытаясь угадать, что может быть сейчас интересно. Банки анализируют транзакции пользователей, пытаясь не допустить мошеннических операций.
Таких примеров огромное количество и с каждым днем их становится только больше.
Но как это работает?
Что такое машинное обучение?
В этой статье я не буду обсуждать детали реализации конкретно этих алгоритмов, перечисленных выше. Они очень сложные и могут запутать того, кто только начинает изучать машинное обучение. Вместо этого, я хочу рассмотреть принципы на которых строится машинное обучение. Если они понятны - работа перечисленных выше сервисов уже не будет казаться магией.
И я приведу простой пример алгоритма, который прояснит эти принципы и позволит вам написать свой первый код использующий машинное обучение!
Основной принцип
Основной принцип машинного обучения в том, что программист не описывает, как компьютер должен решать задачу. Компьютер сам принимает решения, как поступать, основываясь на своем опыте.
Такой подход хорошо подходит для ряда задач, где описать алгоритм очень сложно или невозможно. Давайте посмотрим на пример, где машинное обучение могло бы пригодиться.
Пример
В городе есть агентство недвижимости. Каждый день это агентство сталкивается с проблемой – как оценить стоимость квартиры. У агентства есть база всех проданных квартир, где указаны их характеристики и цены. Но каждая новая квартира уникальна и как сопоставить ее с квартирами из этой базы не ясно.
Начнем решать задачу используя машинное обучение.
Для начала определимся с параметрами квартиры, которые мы будем учитывать. Что бы упростить задачу, будем обращать внимание только на этаж и площадь.
Возьмем имеющиеся данные о ранее проданных квартирах и представим их на графике, где x — площадь, y — этаж. Допустим в этой базе есть запись о том, что квартира с площадью 100 квадратных метров, находящаяся на 5 этаже была продана за 200 000, значит добавляем точку на график, как показано ниже. Одна такая точка, в терминологии машинного обучения, это— прецедент.

Добавим остальные записи из базы.

Теперь график выглядит так.

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

Находим три ближайшие точки к красной точке, они отмечены зеленым. Это три ближайших соседа нашей точки.

И последний шаг – находим среднюю цену ближайших квартир (зеленых точек на графике). Это и будет примерная цена новой квартиры.
(150 000 + 190 000 + 160 000) / 3 = 167 000
Когда это квартира будет продана (по предсказанной цене или нет), к обучающей выборке добавится еще один прецедент, что сделает работу алгоритма еще точнее.
Конечно, мы не можем положиться на такой расчет цены, в реальных условиях, так как на стоимость квартиры влияют еще огромное количество параметров: количество комнат, удаленность от центра города и метро и так далее.
Допустим мы хотим сделать расчет точнее и начинаем учитывать удаленность от метро. В этом случае мы добавляем на график еще одну ось координат, которая представляет количество метров от квартиры до метро. Теперь это уже трехмерный график.
Добавим еще один параметр — количество комнат. Появляется еще одна ось координат, график становится четырехмерным и несмотря на то, что теперь его невозможно изобразить графически или представить, мы без проблем можем использовать его для расчетов.
Количество параметров может доходить до сотен тысяч, достигая невероятной точности. Тогда преимущества машинного обучения и начинает проявляться в полную силу.
Описанный алгоритм – это метод k-ближайших соседей. Это один из простейших алгоритмов в арсенале машинного обучения. У него много недостатков, его редко используют в реальных приложениях, но, на мой взгляд, он отлично подходит для демонстрации того, что такое машинное обучение.
В следующей статье я напишу код на JavaScript, который будет рассчитывать стоимость квартиры, способом, описанным выше.
