Набор данных о доходах взрослых из UCI Repository — классификация с использованием различных моделей.

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

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

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

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

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

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

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

Контролируемое обучение

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

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

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

Это наши «тренировочные данные».

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

Мы хотим использовать обучающие данные для прогнозирования цен на другие дома.

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

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

Это похоже на ключ ответа на тест по математике со стертыми всеми арифметическими символами:

О, нет! Коварный ученик стер арифметические символы с ключа ответа учителя!

Из этого вы можете понять, какие математические задачи были на тесте? Вы знаете, что должны «сделать что-то» с числами слева, чтобы получить каждый ответ справа.

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

Неконтролируемое обучение

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

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

Это похоже на то, как кто-то дает вам список чисел на листе бумаги и говорит: «Я действительно не знаю, что означают эти числа, но, может быть, вы сможете понять, есть ли здесь закономерность, группировка или что-то в этом роде — удачи!»

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

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

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

Примечание. Существует множество других типов алгоритмов машинного обучения. Но это неплохое место для начала.

Это круто, но действительно ли способность оценить стоимость дома считается «обучением»?

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

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

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

Конечно, если вы читаете это через 50 лет и мы выяснили алгоритм сильного ИИ, то весь этот пост покажется вам немного странным. Может, прекрати читать и пойди, скажи своему роботу-слуге, чтобы он сделал тебе бутерброд, будущий человек.

Введение проблемы нашего проекта

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

Данные

Модифицированный набор данных состоит примерно из 48 841 точки данных, каждая из которых имеет 15 признаков.

Целевая переменная: доход (‹=50 тыс., ›50 тыс.)

Импорт библиотек и загрузка данных

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

Анализ данных

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

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

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

Вменение отсутствующего значения

Нормализация

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

Мин-макс масштабирование

Предварительно обработать категориальные признаки

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

Одно горячее кодирование

Выбор функции

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

Поиск корреляции для каждой функции

Выбрано 4 лучших функции

Оценка эффективности

При прогнозировании событий мы можем получить 4 типа результатов: истинно положительные, истинно отрицательные, ложноположительные и ложноотрицательные. Цель проекта — правильно определить, какие люди зарабатывают более 50 000 долларов в год. Поэтому нам следует разумно выбирать нашу оценочную метрику.

Мы можем использовать показатель F-бета как метрику, учитывающую как точность, так и полноту.

Разделение данных

Теперь, когда все категориальные переменные преобразованы и все числовые признаки нормализованы, нам нужно разделить наши данные на обучающие и тестовые наборы. Мы разделили 80% на обучение и 20% на тестирование.

Прогноз

Некоторые из доступных алгоритмов классификации в scikit-learn:

  • Гауссовский наивный байесовский метод (GaussianNB)
  • Деревья решений
  • Методы ансамбля (AdaBoost, Random Forest,..)
  • Стохастический классификатор градиентного спуска (SGDC)
  • Логистическая регрессия

Гауссовский NB и классификатор случайного леса

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

Рассчитайте количество выборок для 1%, 10% и 100% обучающих данных

Настройка модели и оценка производительности:

Логистическая регрессия

Классификатор дерева решений

Максимальная глубина дерева 10

Классификатор градиентного спуска

Наблюдения

  • ГауссианНБ: 84,01%
  • Деревья решений: 85,31%
  • Случайный лес: 84,49%
  • ГДК: 84,05%
  • Логистическая регрессия: 76,02%

Точность оптимизированной модели и F-оценка при тестировании данных классификатора случайного леса составляют 84,49% и 71,20% соответственно. Эти оценки немного лучше, чем у неоптимизированной модели, но время вычислений намного больше. Ориентиры наивного предиктора для точности и F-показателя составляют 24,78% и 29,17% соответственно, что намного хуже, чем у обученной модели.

Вывод

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