Сегодня я рассмотрю пример полиномиальной регрессии.

# 100DaysOfMLCode # 100ProjectsInML

Я буду использовать пример из курса машинного обучения от А до Я на Udemy.

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

Например,
- вместо x2 - у нас x1 в степени 2.
- вместо x3 - у нас x1 в степени 3.

Давайте изучим набор данных.

Набор данных

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

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

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

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

Цель проекта

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

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

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

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

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

Здесь X - это независимая переменная, которая является «Уровнем».
А y - это зависимая переменная, которая является «Зарплатой».

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

X = dataset.iloc[:, 1:2].values

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

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

dataset.iloc[:, 2].values

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

Вот скриншот X и y.

Шаг 2. Подгоните модель линейной регрессии к набору данных

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

Мы будем использовать класс LinearRegression из библиотеки sklearn.linear_model. Мы создаем объект класса LinearRegression и вызываем метод fit, передавая X и y.

Шаг 3. Визуализируйте результаты линейной регрессии

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

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

Шаг 4: Прогнозирование результатов линейной регрессии

Мы видим, что это неверный прогноз, поскольку он составляет 330 000 долларов.

Теперь давайте проверим прогнозы, реализовав полиномиальную регрессию.

Шаг 5: преобразовать X в полиномиальный формат

Для полиномиальной регрессии нам нужно преобразовать нашу матрицу X в X_poly, где X_poly будет содержать X в степени n - в зависимости от выбранной степени.

Если мы выберем степень 2, то X_poly будет содержать X и X в степени 2.

Если мы выберем степень 3, то X_poly будет содержать X, X в степени 2 и X в степени 3.

Для этой цели мы будем использовать класс PolynomialFeatures из библиотеки sklearn.preprocessing. Когда мы создаем объект этого класса - мы должны передать параметр степени.

Начнем с выбора степени, равной 2. Затем мы вызываем метод fit_transform для преобразования матрицы X.

Давайте посмотрим на X_poly

Если вы видите, 2-й столбец - это фактические уровни от 1 до 10, присутствующие в X.

Третий столбец содержит X в степени 2 (как мы выбрали степень 2).

Первый столбец содержит только единицы - это автоматически добавляется классом PolynomialFeatures для включения константы b0.

Шаг 6: аппроксимация полиномиальной регрессии

Теперь мы создадим новый объект линейной регрессии с именем lin_reg_2 и передадим ему X_poly вместо X, который мы передали на шаге 2.

Шаг 7. Визуализируйте результаты поли регрессии

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

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

Шаг 8: Прогнозирование результатов полиномиальной регрессии

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

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

Шаг 9 - Измените степень на 3 и выполните шаги 5–8.

Мы получаем прогноз на 133 тысячи долларов.

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

Давайте увеличим степень еще раз до 4 и посмотрим, улучшится или ухудшится прогноз.

Шаг 10 - Измените степень на 4 и выполните шаги 5–8.

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

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

Итак, в этом случае с помощью линейной регрессии мы получили прогноз в размере 330 тысяч долларов, а с помощью полиномиальной регрессии мы получили прогноз в 158 тысяч долларов.

Вот полный исходный код.