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

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

Для регрессионного варианта алгоритма k-ближайших соседей начнем с использования одного ближайшего соседа. Я добавил 3 точки тестовых данных в виде зеленых звездочек на оси x. Прогноз с использованием одного соседа — это просто целевое значение ближайшего соседа. Они показаны синими звездочками на следующем рисунке.

Мы можем использовать более одного ближайшего соседа. Это улучшает модель для более точных прогнозов. При использовании нескольких ближайших соседей прогноз является средним или средним значением соответствующих соседей. Следующий график показывает k = 3.

Алгоритмы k-ближайших соседей для регрессии реализованы в классе KNeighborsRegressor в scikit-learn. Использование аналогично KNeighborClassifier. Импортируйте следующие библиотеки:

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

Фрагмент кода здесь разбивает набор данных и запускает его в цикле, чтобы определить оптимальный уровень k — сосед для повышения точности. Наконец, plt.show() создает график, чтобы помочь нам определить наилучшее значение k. Ниже приведен скриншот сюжета:

Из приведенного выше графика мы уже можем сделать вывод, что по мере увеличения значения k прогноз модели ухудшается. Согласно графику, при k = 3 мы получаем лучшую модель, поскольку прогноз составляет около 82%. Для нашего одномерного набора данных мы можем видеть, как выглядят прогнозы для всех возможных значений признаков. Для этого мы создаем тестовый набор данных, состоящий из множества точек по оси x, что соответствует одному признаку.

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

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

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

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

Первоначально опубликовано на the-ml-blogs.blogspot.com.