Недавно у меня появилось немного свободного времени во время Нового 2021 года, длинных выходных, и мне было интересно, чем я могу заняться, кроме просмотра фильмов и сна, чтобы провести немного продуктивного времени. Я решил поискать в Интернете некоторые данные, связанные с covid19, и нашел интересный набор данных. Я также проходил курс на Udemy под названием Машинное обучение от А до Я: руки на Python и R в науке о данных, поэтому я решил применить алгоритмы, которые я изучил на наборе данных, и посмотреть некоторые результаты.

Прочитав этот блог, вы получите представление о том, как использовать библиотеки sklearn для создания различных алгоритмов нелинейной регрессии. Цель блога — пролить свет на то, как применять модели к набору данных, а не на прогнозы.

Алгоритмы нелинейной регрессии, которые я использовал:

  1. Полиномиальная регрессия
  2. Поддержка векторной регрессии
  3. Регрессия дерева решений
  4. Регрессия случайного леса

Набор данных

Я выбрал набор данных с https://ourworldindata.org/coronavirus-source-data. У него есть куча столбцов, 54, если быть точным. Для простоты я решил выбрать данные covid19 только из Индии. Кроме того, чтобы визуализировать результаты, я сохранил их в двух измерениях, то есть я взял количество дней с 30.01.2020 по 01.01.2021 в качестве независимой переменной и новые случаи в качестве зависимой переменной.

Этап предварительной обработки

Есть несколько шагов, которые являются общими для всех алгоритмов. Это включает в себя импорт необходимых библиотек, импорт набора данных и назначение X (независимая переменная) и y (зависимая переменная).

Импорт библиотек:

Нам нужны панды для импорта набора данных и matplotlib для построения графика данных.

Импорт набора данных:

Мы читаем CSV-файл и сохраняем его в переменной с именем dataset. Мы используем метод Python .loc, чтобы получить данные о COVID-19 только по Индии. Исходя из этого, мы фильтруем набор данных, чтобы получить только значения new_cases, которые будут зависимой переменной. X (независимая переменная) — диапазон значений от 0 до 337. y (зависимая переменная) — ежедневное количество новых случаев.

Визуализация данных

Давайте нанесем данные, которые мы собираемся использовать, используя нашу модель. Ось X — это количество дней с 01.01.2020 по 01.01.2021, поэтому мы получаем 338 точек данных. Ось Y — это ежедневные новые случаи за каждый день. Визуализация выглядит следующим образом :

Понятно, что данные нелинейны.

Код для получения сюжета выглядит следующим образом:

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

Полиномиальная регрессия

В полиномиальной регрессии связь между независимой переменной x и зависимой переменной y моделируется как полином n-й степени от x.

Полиномиальная регрессия аналогична линейной регрессии, за исключением того, что в уравнении используются разные степени x (x, x², x³…) в полиномиальной регрессии, в отличие от линейной регрессии, в которой используется только x.

Линейная регрессия

Полиномиальная регрессия

Мы собираемся использовать PolynomialFeatures из библиотеки предварительной обработки sklearn и LinearRegression из библиотеки linear_modelsklearn для построения модели. PolynomialFeatures помогает нам получить различные степени независимой переменной, а именно x, x², x³ и так далее. Мы используем линейную регрессию для построения модели, но с разной степенью независимой переменной в качестве входных данных.

Теперь переменная linear_regressor содержит нашу модель полиномиальной регрессии, поскольку она подходит для разных степеней X. Мы используем степень 7, поэтому мы масштабируем переменную X в X, X², X³, X⁴ , X⁵, X⁶ и X⁷ и сохраняем ее в X_poly.

Чтобы визуализировать подходящую модель, мы должны сделать следующее:

И получаем следующий результат:

Теперь давайте попробуем использовать модель, чтобы предсказать, какими будут новые случаи через 350 дней после 30.01.2020, то есть 14.01.2021.

Модель предсказывает, что 14 января 2021 года в Индии будет около 27000 новых случаев.

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

Опорная векторная регрессия

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

В нелинейной регрессии опорных векторов функция преобразует данные в более высокое измерение и выполняет линейное разделение. Мы используем ядро ​​rbf для решения нашей проблемы.

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

Мы используем StandardScaler из библиотеки предварительной обработки sklearn для масштабирования функций.

Теперь мы готовы подогнать модель SVR к нашему масштабированному набору данных.

Чтобы визуализировать подходящую модель, мы должны сделать следующее:

И получаем следующий результат:

Теперь давайте попробуем использовать модель, чтобы предсказать, какими будут новые случаи через 350 дней после 30.01.2020, то есть 14.01.2021.

Модель предсказывает, что 14 января 2021 года в Индии будет около 25000 новых случаев.

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

Регрессия дерева решений

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

Мы собираемся использовать DecisionTreeRegressor из библиотеки дерева sklearn.

Чтобы визуализировать подходящую модель, мы должны сделать следующее:

И получаем следующий результат:

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

Теперь давайте попробуем использовать модель, чтобы предсказать, какими будут новые случаи через 350 дней после 30.01.2020, то есть 14.01.2021.

Модель предсказывает, что 14.01.2021 в Индии будет около 20000 новых случаев.

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

Регрессия случайного леса

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

Мы будем использовать RandomForestRegressor из библиотеки ансамбля sklearn.

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

Чтобы визуализировать подходящую модель, мы должны сделать следующее:

И получаем следующий результат:

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

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

Теперь давайте попробуем использовать модель, чтобы предсказать, какими будут новые случаи через 350 дней после 30.01.2020, то есть 14.01.2021.

Модель предсказывает, что 14.01.2021 в Индии будет около 20700 новых случаев.

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

Давайте посмотрим, предсказание какой модели приближается! :П

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

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

https://scikit-learn.org/stable/

Приятного обучения! :-)