Простое введение в множественную регрессию

Фон

Одноцикловые газотурбинные электростанции вырабатывают электроэнергию, используя природный газ и сжатый воздух. Воздух забирается из окружающей среды, сжимается и подается в камеру сгорания газовой турбины. Здесь впрыскивается природный газ, который смешивается со сжатым воздухом и воспламеняется. При сгорании образуется поток горячего газа под высоким давлением, который проходит через турбину, заставляя ее вращаться (с огромной скоростью). Следовательно, это вращает генератор, который соединен с турбиной для производства электроэнергии.

Для одноцикловых газовых турбин большая часть энергии тратится впустую в виде горячего выхлопа, достигая эффективности преобразования энергии в лучшем случае 35%. Электростанции с комбинированным циклом используют эту неэффективность, улавливая отходящее тепло с помощью парогенератора-утилизатора (HRSG), чтобы производить еще больше энергии.

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

Выходная мощность электростанции с комбинированным циклом (ПГУ) зависит от нескольких параметров, таких как атмосферное давление, давление выхлопного пара, температура окружающей среды и относительная влажность. Возможность прогнозировать выходную электрическую мощность при полной нагрузке важна для эффективной и экономичной работы электростанции. В этой статье мы будем использовать машинное обучение для разработки прогнозной модели для прогнозирования выходной мощности при полной нагрузке CCPP.

Цели

  1. Разработать прогнозную модель для прогнозирования выходной мощности при полной нагрузке.
  2. Оцените производительность модели

Совет: Поскольку цель состоит в том, чтобы предсказать выходную мощность на основе некоторых параметров, это проблема регрессии. Регрессия направлена ​​на установление связи между предикторами (переменными, которые помогают нам делать прогноз) и целью (значением, которое мы хотим предсказать).

Набор данных

В этой статье мы будем использовать набор данных, предоставленный Pinar Tufekci, который доступен в репозитории машинного обучения UCI. Набор данных был собран за шестилетний период и состоит из 9568 точек данных, собранных, когда электростанция была настроена на работу с полной нагрузкой.

Https://archive.ics.uci.edu/ml/datasets/Combined+Cycle+Power+Plant?ref=datanews.io

Множественная регрессия

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

Общая форма множественной регрессии

Наш рабочий процесс

  1. Исследовательский анализ данных
  2. Разработайте модель
  3. Оцените модель
  4. Выберите лучшую модель

1. Исследовательский анализ данных

Сначала мы загрузим данные после импорта всех необходимых нам библиотек Python.

импортировать панды как pd, numpy как np, matplotlib.pyplot как plt
data = pd.read_csv (‘CCPP.csv’)

df = pd.DataFrame (данные)

Затем мы исследуем данные, чтобы прочувствовать их.

df.info ()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 9568 entries, 0 to 9567
Data columns (total 5 columns):
AT    9568 non-null float64
V     9568 non-null float64
AP    9568 non-null float64
RH    9568 non-null float64
PE    9568 non-null float64
dtypes: float64(5)
memory usage: 373.9 K

Мы видим, что этот набор данных состоит из 5 числовых переменных (float64). Для всех переменных нет пропущенных значений (9568 ненулевых), а тип данных (dtypes) является числом с плавающей запятой. Это, безусловно, хорошие новости, поскольку у нас чистый набор данных.

Далее мы смотрим на распределение набора данных.

df.describe ()

Набор данных состоит из 4-х среднечасовых переменных или характеристик и целевой переменной, которая является выходной мощностью (PE).

  • Температура окружающей среды (AT) в диапазоне от 1,81 ° C до 37,11 ° C,
  • Давление окружающей среды (AP) в диапазоне 992,89–1033,30 миллибар,
  • Относительная влажность (RH) в диапазоне от 25,56% до 100,16%
  • Выпускной вакуум (В) в диапазоне 25,36–81,56 см рт. Ст.
  • Чистая часовая выработка электроэнергии (ПЭ) 420,26–495,76 МВт

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

Корреляционная матрица - это структурированный подход к ранжированию важности предикторов или входных переменных (входных переменных, которые имеют наибольшее влияние) на выход . Для этого мы строим тепловую карту корреляционной матрицы с помощью Seaborn.

импортировать seaborn как sns
plt.figure (figsize = (7, 5))
sns.heatmap (df.corr (), annot = True)

Совет: C корреляция измеряется по шкале от -1 до 1. -1 означает полную отрицательную корреляцию, а 1 означает полную положительную корреляцию. 0 означает отсутствие корреляции.

Из корреляционной матрицы мы видим, что AT и V имеют сильную отрицательную корреляцию с целевой переменной (PE), поскольку их коэффициенты корреляции составляют -0,95 и -0,87 соответственно. AP и RH имеют слабую положительную корреляцию с PE с коэффициентами корреляции 0,52 и 0,39.

Мы можем визуализировать двумерное распределение набора данных (которое показывает, как каждая функция соотносится друг с другом и PE)

sns.set (style = ”ticks”)
sns.pairplot (df, diag_kind = ‘hist’)

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

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

2. Разработайте модель

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

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

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

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

Модель 1. Мы выбираем только AT в качестве предиктора (поскольку он имеет наиболее сильную корреляцию с целевой переменной (PE))

df_1 = df[‘AT’]

Модель 2. Мы выбираем AT и V в качестве предикторов.

df_2 = df[[‘AT’, ‘V’]]

Модель 3. Мы выбираем AT, V и RH в качестве предикторов.

df_3 = df[[‘AT’, ‘V’, ‘RH’]]

Модель 4. Мы выбираем AT, V, AP и RH в качестве предикторов.

df_4 = df[[‘AT’, ‘V’, ‘AP’, ‘RH’]]

Альтернатива: df_4 = df.drop ([‘PE’], axis = 1)

Наша целевая переменная (PE) - y

y = df[‘PE’]

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

Обучение модели

Прежде чем мы фактически обучим нашу модель машинного обучения, нам нужно сначала разделить наши данные на набор для обучения и тестирования. Обучающий набор будет использоваться для создания математической модели взаимосвязи между функциями и целевой переменной. Набор тестов будет использоваться для проверки модели. Для этого мы воспользуемся библиотекой sci-kit learn и импортируем модуль train_test_split.

Мы разделим набор данных на 80% обучающий набор и 20% тестовый набор (с использованием принципа Парето).

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split (df_1, y, test_size = 0.2, random_state = 0)

Этот шаг будет повторен для всех наборов данных других моделей, заменив df_1 на соответствующий массив функций. Например, Модель 4 с df_4.

Наконец, мы подошли к захватывающей части, где мы реализуем алгоритм регрессии и разрабатываем нашу модель прогнозирования. Для этого мы будем использовать регрессию OLS, регрессию дерева решений и регрессию случайного леса. Сначала мы импортируем LinearRegression из библиотеки sci-kit learn и обучаем модель.

Для линейной регрессии

из sklearn.linear_model import LinearRegression
regressor = LinearRegression ()
regressor.fit (X_train, y_train)

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

y_pred = regressor.predict (X_test)

Реализация кода для регрессии дерева решений и регрессии случайного леса можно увидеть ниже:

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

из sklearn.tree import DecisionTreeRegressor
dt_regressor = DecisionTreeRegressor ()
dt_regressor.fit (X_train, y_train)

Для прогнозов

y_pred = dt_regressor.predict (X_test)

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

из sklearn.ensemble import RandomForestRegressor
rf_regressor = RandomForestRegressor ()
rf_regressor.fit (X_train, y_train)

Для прогнозов

y_pred = rf_regressor.predict (X_test)

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

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

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

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

  1. Среднеквадратичная ошибка (RMSE): измеряет среднюю ошибку модели при прогнозировании результата наблюдения.

Совет. Чем ниже показатель RMSE, тем лучше

from sklearn.metrics import mean_squared_error
mse = mean_squared_error (y_test, y_pred)
rmse = np.sqrt (mse)
rmse

2. R-Squared: это означает, насколько вариативность целевой переменной может быть объяснена набором функций, используемых при обучении модели.

Совет. Чем выше оценка R-квадрат, тем лучше

из sklearn.metrics import r2_score
r_squared = r2_score (y_test, y_pred)
r_squared

3. Средняя абсолютная ошибка: измеряет, насколько прогнозируемые значения отличаются от фактических.

Совет. Чем ниже значение MAE, тем лучше.

from sklearn.metrics import mean_absolute_error
mae = mean_absolute_error (y_test, y_pred)
mae

Теперь, когда мы оценили все наши модели, мы видим, что алгоритм регрессии случайного леса с моделью 4 (все функции) дал нам наилучшую производительность. R-квадрат равен 0,9644 (что означает, что 96,44% вариации целевой переменной PE можно объяснить с помощью модели).

Точно так же он дает самое низкое среднеквадратичное значение 3,1891.

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

Сноски

В начале этой статьи мы решили разработать прогнозную модель для выходной мощности при полной нагрузке (PE) на основе предоставленного набора данных. Мы изучили набор данных, чтобы выяснить, есть ли у нас пропущенные значения или другие проблемы, а затем поигрались с выбором подмножеств 4 функций в 3 различных алгоритмах регрессии машинного обучения. Мы смогли обнаружить, что использование полного набора параметров или функций в алгоритме регрессии случайного леса дает наилучшие результаты. Мы получили R-квадрат 0,9644 и RMSE 3,1891.

Надеюсь, вы нашли это полезным. Всего наилучшего!