Сегодня мы рассмотрим одну из самых популярных регрессионных моделей под названием «Дерево решений».

#100DaysOfMLCode #100ProjectsInML

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

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

И та же проблема была решена в проекте 4 с помощью регрессии опорных векторов — вы можете проверить этот проект здесь.

Давайте разберемся с деревьями решений.

Модель регрессии дерева решений является нелинейной и не непрерывной моделью.

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

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

Давайте рассмотрим пример сценария, чтобы понять, как работает дерево решений.

  • Алгоритм выполняет первое разбиение при X1 = 20, поэтому точечная диаграмма делится на 2 сегмента: первый сегмент — это когда X1 ‹ 20, а второй сегмент — это когда X1 > 20, как показано ниже.

  • Теперь разделение 2 происходит при X2 = 170, но это происходит только в точках, где X1 > 20. Это показано на рисунке ниже.

  • Далее происходит разделение 3 на X2 = 200 — но это происходит на точки X1 ‹ 20

  • Наконец, разделение 4 происходит при X1 = 40 — но это относится к точкам, где X1 > 20 и X2 ‹ 170.

Итак, наше дерево решений готово.

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

Теперь предположим, что у нас есть новая точка данных, где X1 = 30 и X2 = 50, она попадает в лист, среднее значение которого равно -64,1, поэтому алгоритм дерева решений будет предсказывать значение y как -64,1. На приведенной ниже диаграмме видно, как достигается это значение.

Набор данных

Сначала давайте посмотрим на набор данных. Это Position_Salaries.csv, его можно найти здесь.

Он имеет 3 столбца — «Должность», «Уровень» и «Зарплата» и описывает примерный диапазон заработной платы сотрудника в зависимости от того, под какой уровень он попадает.

Например, если сотрудник является менеджером — он попадает на уровень 4 и должен получать около 80 000 долларов.

Ниже представлен набор данных.

Цель проекта

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

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

Давайте начнем.

Шаг 1: Загрузите набор данных

Если мы посмотрим на набор данных, нам нужно спрогнозировать зарплату для сотрудника, который подпадает под уровень 6.5 — поэтому нам действительно не нужен первый столбец «Должность».

Здесь X – это независимая переменная – "Уровень"
, а – зависимая переменная – "Зарплата".

Итак, для X мы указываем

X = набор данных.iloc[:, 1:2].значения

что просто означает взять все строки и все столбцы от индекса 1 до индекса 2, но не включая индекс 2 (диапазон верхней границы не включен)

И для y мы указываем

набор данных.iloc[:, 2].значения

что просто означает брать все строки и только столбцы с индексом 2 — в python индексы начинаются с 0 — поэтому индекс 2 здесь — это второй столбец, который является зарплатой

Шаг 2 — Подгонка регрессора дерева решений

Мы будем использовать класс DecisionTreeRegressor из библиотеки sklearn.tree. Сначала мы создаем объект класса DecisionTreeRegressor и передаем параметр критерия как «mse» (среднеквадратичная ошибка), а затем вызываем метод подгонки, передавая X и y.

Шаг 3 — Визуализируйте

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

Шаг 4 — Сделайте прогноз

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

The predicted salary of a person at 6.5 Level is [150000.]

Получаем прогноз 150к.

Итак, чтобы вернуться к предыдущим моделям регрессии

Вот и весь исходник.